![](/img/trans.png)
[英]UnBoundLocalError: local variable referenced before assignment (Python)
[英]Python | if variable: | UnboundLocalError: local variable 'variable' referenced before assignment
我试图使用if
语句来检查变量是否已分配,而不是None
。
# Code that may or may not assign value to 'variable'
if variable:
do things
这会在if
语句的行处引发错误:“UnboundLocalError:在赋值之前引用的局部变量'变量'”。
我想如果变量没有被分配,它只会被解释为False?
我尝试过if variable in locals():
无济于事。
这是怎么回事? 我能做些什么才能达到我想要的效果?
谢谢
最好在开始时简单地将x
初始化为None
并测试None(如在Ned的答案中)。
发生的事情是,无论何时在“加载”(即rvalue)上引用变量,Python都会查找并要求它存在。
如果您的变量名为x
,则以下引发:
if x in locals(): ...
并不是你想要的,因为它会检查变量所持有的值是否在locals()
。 不是名字x
是否存在。
但你可以做到
if 'x' in locals(): ...
在函数的开头将变量初始化为None。 然后你可以用以下方法检查:
if x is not None:
你的假设是错的。 Python中没有未初始化的变量。 Python中对“变量”的任何引用都会在某个范围(Local,Enclosing,Global或Builtin)的命名空间中找到一个条目,或者它的名称查找错误。
最好将x = y形式的Python语句视为绑定语句而不是赋值 。 绑定将名称与对象相关联。 该对象独立于其绑定而存在(例如,由文字表达式实例化)。 相比之下,人们更熟悉的大多数编程语言都有变量......它们具有相关的类型和位置。 Python“变量”是字典中的条目, id()返回绑定名称的对象的位置。 (事实上,这是一个内存位置是一个实现细节;但原则是Python“变量名称”不像更传统语言的“变量”)。
这里有更多内容: https : //softwareengineering.stackexchange.com/a/200123/11737
实现此目的的最佳方法是在绑定值之前避免使用名称。 在locals()或globals()中寻找这样的东西只是糟糕,丑陋的编码实践。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.