Python |如果变量:| UnboundLocalError:局部变量'变量'在分配之前引用

时间:2018-01-25 23:27:21

标签: python

我正在尝试使用if语句来检查变量是否已分配且不是None

# Code that may or may not assign value to 'variable'

if variable: 
    do things

这会在if语句的行处引发错误:" UnboundLocalError:局部变量'变量'在转让之前引用"。

我认为如果变量没有被分配,它只会被解释为False?

我试过if variable in locals():无济于事。

发生了什么?我能做些什么才能达到我想要的结果?

由于

3 个答案:

答案 0 :(得分:5)

最好在开头简单地初始化xNone并测试无(如在Ned的回答中)。

当你在" load"上引用一个变量时,会发生什么? (即rvalue),Python查找并要求它存在。

如果您的变量名为x,则会抛出以下内容:

if x in locals(): ...

并不是你想要的,因为它会检查变量所持有的是否在locals()中。不是名称x是否存在。

但你可以做到

if 'x' in locals(): ...

答案 1 :(得分:4)

在函数开头将变量初始化为None。然后您可以查看:

df=read.table(text=" c1  c2  c3  c4 c48
    a  7  11 15   58
            b  6  9  13   46
            c  8  14 20   73 
            ",h=T)

答案 2 :(得分:0)

你的假设是错误的。 Python中没有未初始化的变量。任何对"变量的引用"在Python中,要么在某个范围的命名空间中找到一个条目(Local,Enclosing,Global或Builtin),要么它的名称查找错误。

最好将 x = y 形式的Python语句视为绑定语句,而不是赋值。绑定将名称与对象相关联。该对象独立于其绑定而存在(例如,由文字表达式实例化)。相比之下,人们更熟悉的大多数编程语言都有变量......它们具有相关的类型和位置。 Python"变量"是字典中的条目, id()返回绑定名称的对象的位置。 (这是一个内存位置的事实是一个实现细节;但原则是Python"变量名称"不像更常规语言的"变量"。

此处还有更多内容:https://softwareengineering.stackexchange.com/a/200123/11737

实现此目的的最佳方法是在绑定值之前避免使用名称。在 locals() globals()中寻找这样的东西只是糟糕,丑陋的编码实践。