在if语句中声明一个变量,一个Python反模式?

时间:2016-01-26 09:05:12

标签: python anti-patterns

我们在工作中讨论了以下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变量的消息。

1 个答案:

答案 0 :(得分:6)

这不是反模式。这是一个 bug

Python没有'声明',只有binding operations;名称是绑定的,还是不绑定的。尝试访问尚未绑定的名称会导致异常。

除非您的代码专门处理异常且预期,否则运行NameErrorUnboundLocalError异常应被视为错误。

换句话说,尝试引用名称的代码应始终遵循绑定名称的相同条件,准备好处理将被引发的异常,如果这些条件并不总是成立。将变量赋予if语句之外的默认值意味着它在所有环境下绑定,因此您也可以始终引用它。