Python处理未声明的变量

时间:2014-02-11 16:48:55

标签: python variables declaration

在Python中可以避免变量(预)声明以避免 NameError:名称'c'未定义

a=5
if a==7:
    c=10
if c: print c

在最后一行 ,如果c: ,只需验证变量“ c ”是否为“无”。可以用来检查'c'变量是否存在(或者是否已经预先声明)?

5 个答案:

答案 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

或使用globals()locals()函数:

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)