我的直觉知道这不好,但我只是无法确切说明原因。
variable = globals()['__builtins__'][sys.argv[1]]
对于我的项目,我将实现一个字典,它将从命令行获取我需要的类名,这样我就可以限制和控制有效输入。但我一开始是这样写的,然后就想等等,这很糟糕。我只是无法用语言确切地说明原因。
有人知道一篇文章或之前回答过的问题可以解决这个问题吗?
最佳答案
如果您无论如何都要进行输入清理,也可以写为:
ALLOWED_ARGS = {"repr", "str", "unicode"}
funcs = {f: getattr(__builtins__, f) for f in ALLOWED_ARGS}
# funcs.update({"custom": custom_func})
# I'd also assert on all functions having the same arity,
# but this is tricky with builtins...
func = funcs[sys.argv[1]]
不知道为什么,但对我来说似乎更安全。
如果你是肯定的,输入总是正确的,你的代码对我来说似乎很好,除了 __builtins__[name]
不应该工作,你必须使用 getattr(__builtins__,名称)
。
关于python - 使用全局字典似乎很糟糕,但到底为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16490613/