在Python中可以避免变量(预)声明以避免 NameError:名称'c'未定义:
a=5
if a==7:
c=10
if c: print c
在最后一行 ,如果c: ,只需验证变量“ c ”是否为“无”。可以用来检查'c'变量是否存在(或者是否已经预先声明)?
答案 0 :(得分:7)
当然,首先分配None
:
a = 5
c = None
if a == 7:
c = 10
if c:
print c
None
在布尔上下文中作为False
进行测试,因此if c:
仍可按写入方式运行。
您还可以捕获NameError
例外:
try:
print c
except NameError:
pass
if 'c' in locals():
# in a function
if 'c' in globals():
# outside a function
但这只是简单的丑陋和不必要的。
答案 1 :(得分:6)
你可以捕获异常。
a = 5
if a == 7:
c = 10
try:
print c
except NameError:
pass
答案 2 :(得分:3)
您可以使用locals
检查变量是否在本地范围内:
>>> c = 1
>>> locals()
{'__doc__': None, 'c': 1, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', '__package__': None}
>>> 'c' in locals()
True
>>>
您可能也对globals
感兴趣。
答案 3 :(得分:1)
目前尚不清楚为什么在某些情况下需要变量而不是其他情况,但最简单的方法是将print
移动到范围c
中分配:
if a == 7:
c = 10
print(c)
或完全删除变量:
if a == 7:
print(10)
答案 4 :(得分:0)
在python3中,尽管Martijn认为它很难看:
如果您知道变量是全局变量:
if globals().get('abc'): print (True)
如果您知道它是本地的:
if locals().get('abc'): print (True)