有人能给我解释一下为什么type(foo)(bar)这么不受欢迎吗?

2024-06-16 15:05:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个配置变量的dict,如下所示:

self.config = {
    "foo": "abcdef",
    "bar": 42,
    "xyz": True
}

我希望能够从用户输入中更新这些变量(在本例中,这些变量总是以字符串的形式出现)。我面临的问题是显而易见的,我的第一个解决方案对我来说似乎足够好:

^{pr2}$

然而,Freenode中的python似乎对我提出这样的解决方案感到不快。有人能告诉我为什么这是不好的做法吗?在


Tags: 字符串用户selfconfigtruefoobar解决方案
2条回答

更不用说,Python中有config模块,这里是我如何处理config的,以整数值“bar”为例。+1对于alex为“”,对于False的说法,请参见值“xyz”!在

config = {
    "foo": "abcdef",
    "bar": "42",
    "xyz": "True" ## or 'Yes' or anything not False, "" for False
}

bar = ''
while not bar:
    barinput = raw_input('Enter property  bar, integer (1..99): ')
    try:
        if 0 < int(barinput) < 100:
            pass
        else:
            raise ValueError("%s is not integer in range 1..99" % barinput)
    except ValueError as e:
        print(str(e)+"\nWrong input, try again")
    else:
        print("Saving correct value")
        bar = config["bar"] = barinput
print('New value of "bar" in config: %i' % int(config["bar"]))

该值也可以在config中保存为int,但是我们不需要type,因为我们知道我们正在输入integer。在

并非所有类型都支持“用字符串调用类型以生成该类型的新实例”这一成语。但是,如果您确保只有在配置dict中有这样的类型(可能在初始化时进行健全性检查),在转换尝试周围设置适当的try/except保护(处理用户错误,如键入错误,比使用堆栈跟踪终止要好得多;-)对支持它的类型使用该功能没有“固有的错误”。在

相关问题 更多 >