Python 如何检查全局范围内是否存在变量?

Python 如何检查全局范围内是否存在变量?,python,python-3.x,Python,Python 3.x,请帮忙解决这个问题 #а = 'dg' try: a except: print('y') else: print('n') 下面的代码应该检查全局范围中是否存在变量。由于变量“a”不存在,则屏幕应显示“n”。但是是一个“y”我想你倒过来了'y'和'n': try: a except NameError: print('n') else: print('y') 如果您尝试使用a而不定义它,它将引发错误并打印'n'实际上,您正在检查全局和局部范

请帮忙解决这个问题

#а = 'dg'

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

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

我想你倒过来了
'y'
'n'

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

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

实际上,您正在检查全局和局部范围,但这没关系

try:
    a
except NameError:
    print('n')
else:
    print('y')
Python在所有可用名称空间中搜索该变量,顺序如下:

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

直接查看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()

除了:,不要使用
,至少定义
除了例外:
@Tupteq是的,我已经为此编辑了我的帖子,无论如何谢谢:)@fede1024
namererror
已经是一个内置名称,无需导入。@AshwiniChaudhary Edit.com,错误消息已被理解。但是,即使定义了所有相同的变量,也不会对其进行检查。以下代码显示“n”。а='dg'try:a除:print('n')外,其他:print('y'))
 >>> n = 'print'
 >>> if 'n' in globals():
 ...     print 'n'
 ... else:
 ...     print 'y'
 ...
 n
 >>> del n
 >>> if 'n' in globals():
 ...     print 'n'
 ... else:
 ...     print 'y'
 ...
 y
 >>>