我正在尝试使用if
语句来检查变量是否已分配且不是None
。
# Code that may or may not assign value to 'variable'
if variable:
do things
这会在if
语句的行处引发错误:" UnboundLocalError:局部变量'变量'在转让之前引用"。
我认为如果变量没有被分配,它只会被解释为False?
我试过if variable in locals():
无济于事。
发生了什么?我能做些什么才能达到我想要的结果?
由于
答案 0 :(得分:5)
最好在开头简单地初始化x
到None
并测试无(如在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()中寻找这样的东西只是糟糕,丑陋的编码实践。