有人会向我解释为什么类型(foo)(bar)是如此沉重的气馁?

Fra*_*til 2 python types user-input

我有一个配置变量的字典,看起来像这样:

self.config = {
    "foo": "abcdef",
    "bar": 42,
    "xyz": True
}
Run Code Online (Sandbox Code Playgroud)

我希望能够从用户输入更新这些变量(在这种情况下,它将始终以字符串的形式).我面临的问题很明显,我的第一个解决方案似乎对我来说足够好了:

def updateconfig(self, key, value):
    if key in self.config:
        self.config[key] = type(self.config[key])(value)
Run Code Online (Sandbox Code Playgroud)

然而,Freenode中的#python几乎似乎被冒犯了,我建议这样的解决方案.有人能告诉我为什么这是不好的做法?

Ale*_*lli 5

并非所有类型都支持这样的习语"用字符串调用类型来创建该类型的新实例".不过,如果你确保你在你的配置字典有这样的类型(与初始时间也许完整性检查),把合适的try/ except保护在你尝试转换(处理用户错误,例如在一个错别字远远比死更好的方法堆栈跟踪将是;-),对于支持它的类型使用该功能没有任何"内在错误".

  • `bool("False") - > True`是一种不太适用的类型. (3认同)