2016-01-26 61 views
0

我们在我的工作有关以下Python代码(也许反模式)的讨论。在if语句中声明一个变量,一个Python反模式?</p> <pre><code>if conditional_variable_: a = "Some value" print a </code></pre> <p>Supose <code>conditional_variable</code>定义,但<code>a</code>变量没有:

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

也许这修复程序可能修复反模式:

a = "default value" 
if conditional_variable: 
    a = "changed_value" 
print a 

在这种情况下,a变量被定义之前使用它。考虑print a就像使用a变量。

回答

6

这不是反模式。这是一个错误

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

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

换句话说,试图引用名称的代码应始终受制于绑定名称的相同条件,即要准备好处理在这些条件不总是成立时会引发的异常。在if声明之外给变量赋予一个默认值意味着它被绑定在所有的情况下,所以你也可以总是引用它。

相关问题