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

sso*_*oto 0 python anti-patterns

我们在工作中讨论了以下Python代码(可能是反模式):

if conditional_variable_:
    a = "Some value"
print a
Run Code Online (Sandbox Code Playgroud)

Supose conditional_variable已定义但a变量未定义.

问题是关于使用变量而不声明它.变量a是在一段代码中创建的,可能永远不会被执行但它被使用.

也许修复可能会修复反模式:

a = "default value"
if conditional_variable:
    a = "changed_value"
print a
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a变量在使用前定义.考虑print aa变量的消息.

Mar*_*ers 6

它不是一种反模式.这是一个错误.

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

除非你的代码将专门处理异常和预期它,运行到一个NameErrorUnboundLocalError异常应被认为是一个错误.

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