Python:检查对象是否在作用域中存在

26 投票
5 回答
115273 浏览
提问于 2025-04-16 19:46

可能重复的问题:
Python - 检查变量是否存在

有没有一种简单又高效的方法,可以检查一个对象在当前范围内是否存在呢?

在Python中,所有东西都是对象(包括变量、函数、类、类的实例等等),所以我想找一种通用的方法来测试一个对象是否存在,不管它是什么。

我原本以为会有一个叫 exists() 的内置函数,但我找了半天也没找到合适的。

5 个回答

8

我想你在找的东西可能是 locals。下面是它的工作原理:

>>> foo = 1
>>> l = locals()
>>> print l
{'__builtins__': <module '__builtin__' (built-in)>, 'l': {...}, 
 '__package__': None,'__name__':'__main__', 'foo': 1, '__doc__': None}
>>> print l['foo']
1
30

你似乎在找 hasattr() 这个函数。这个函数的作用是检查在一个对象的命名空间中(包括导入的模块也算是对象),某个属性名称是否存在。

所以,我可以这样做:

>>> import math
>>> hasattr(math, 'atan')
True

或者类似这样:

>>> class MyClass(object):
...     def __init__(self):
...         self.hello = None
... 
>>> myObj = MyClass()
>>> hasattr(myObj, 'hello')
True
>>> hasattr(myObj, 'goodbye')
False
41

你可以随时这样做:

try:
    some_object
except NameError:
    do_something()
else:
    do_something_else()

撰写回答