繁体   English   中英

Python | 如果变量:| UnboundLocalError:赋值前引用的局部变量'variable'

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM