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

Declaring a variable in an if statement, a Python anti pattern?

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

它不是 anti-pattern。这是一个 bug.

Python没有'declarations',只有binding operations;名称要么绑定,要么不绑定。尝试访问尚未绑定的名称会导致异常。

除非您的代码专门处理异常并且预期它,运行 进入 NameErrorUnboundLocalError 异常应被视为错误.

换句话说,尝试引用名称的代码应始终遵守绑定名称的相同条件,准备好处理将要发生的异常如果这些条件并不总是成立,则提出。在 if 语句之外给你的变量一个默认值意味着它在 所有 情况下都是绑定的,所以你也可以总是引用它。