我们在工作中讨论了以下Python代码(可能是反模式):
if conditional_variable_:
a = "Some value"
print a
定义了conditional_variable
,但a
变量没有。
问题是关于使用变量而不声明它。变量a
是在一段代码中创建的,可能永远不会被执行但是它被使用了。
也许修复可能会修复反模式:
a = "default value"
if conditional_variable:
a = "changed_value"
print a
在这种情况下,a
变量在使用之前已定义。将print a
视为a
变量的消息。
答案 0 :(得分:6)
这不是反模式。这是一个 bug 。
Python没有'声明',只有binding operations;名称是绑定的,还是不绑定的。尝试访问尚未绑定的名称会导致异常。
除非您的代码专门处理异常且预期,否则运行NameError
或UnboundLocalError
异常应被视为错误。
换句话说,尝试引用名称的代码应始终遵循绑定名称的相同条件,或准备好处理将被引发的异常,如果这些条件并不总是成立。将变量赋予if
语句之外的默认值意味着它在所有环境下绑定,因此您也可以始终引用它。