如何检查全局范围内变量的存在?

时间:2014-02-04 12:54:26

标签: python python-3.x

请帮助解决问题。

#а = 'dg'

try:
    a
except:
    print('y')
else:
    print('n')

以下代码应检查全局范围中是否存在变量。由于变量“a”不存在,则屏幕应显示“n”。但是是“y”

3 个答案:

答案 0 :(得分:2)

我认为你倒置了'y''n'

try:
    a
except NameError:
    print('n')
else:
    print('y')

如果您尝试使用a而未定义它,则会引发错误并打印'n'

答案 1 :(得分:1)

实际上,您正在检查全局本地范围,但这没关系。

try:
    a
except NameError:
    print('n')
else:
    print('y')

Python按顺序在所有可用命名空间中搜索该变量:

  • 本地命名空间 - 特定于当前函数或类方法。如果函数定义了局部变量x,或者有一个参数x,Python将使用它并停止搜索。
  • 全局命名空间 - 特定于当前模块。如果模块定义了一个名为x的变量,函数或类,Python将使用它并停止搜索。
  • 内置命名空间 - 所有模块的全局。作为最后的手段,Python将假设x是内置函数或变量的名称。

答案 2 :(得分:0)

如何直接查看globals()命名空间字典:

 >>> n = 'print'
 >>> if 'n' in globals():
 ...     print 'n'
 ... else:
 ...     print 'y'
 ...
 n
 >>> del n
 >>> if 'n' in globals():
 ...     print 'n'
 ... else:
 ...     print 'y'
 ...
 y
 >>>

对于本地人,您也可以登录locals()