可能是重复问题:
Python - 检查变量是否存在
有没有一种高效、简单和Pythonic的方法来检查作用域中是否存在一个对象?
在Python中,一切皆为对象(变量、函数、类、类实例等),因此我正在寻找一种通用的对象存在性测试方法,无论它是什么。
我半期望会有一个exists()
内置函数,但我找不到任何符合要求的函数。
可能是重复问题:
Python - 检查变量是否存在
有没有一种高效、简单和Pythonic的方法来检查作用域中是否存在一个对象?
在Python中,一切皆为对象(变量、函数、类、类实例等),因此我正在寻找一种通用的对象存在性测试方法,无论它是什么。
我半期望会有一个exists()
内置函数,但我找不到任何符合要求的函数。
你可以这样做:
try:
some_object
except NameError:
do_something()
else:
do_something_else()
>>> 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
我相信你正在寻找类似 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
locals()
гҖҒglobals()
е’Ң vars(__builtin__)
пјҢеӣ жӯӨиҝҷ并дёҚжҳҜжЈҖжҹҘеҗҚз§°жҳҜеҗҰеҪ“еүҚеңЁдҪңз”ЁеҹҹеҶ…гҖӮ - martineaulocals()
来查找变量是否存在,可以这样做:'variable_name' in locals()
。它返回一个布尔值,指示变量在本地命名空间中的存在。 - Samie Bencherif如果您想确定本地变量或对象属性是否存在,将会有所不同。对于对象,可以使用hasattr(object, "attribute")来实现。
这也适用于模块:
import math
hasattr(math,"pow") => True
但是对于我们可以称为主要作用域的部分,您需要使用locals(),因为hasattr()需要某种对象来深入挖掘。在这种情况下,没有这样的对象...
exists_mainscope = lambda name: locals().has_key(name)
exists_mainscope("test") => False
因此,您可能正在寻找以下内容:
def exists(name,obj=None):
if obj is None: return locals().has_key(name)
else: return hasattr(obj,name)
enter code here
你可以自己编写:
import __builtin__
import sys
def exists(name):
return (name in sys._getframe(1).f_locals # caller's locals
or name in sys._getframe(1).f_globals # caller's globals
or name in vars(__builtin__) # built-in
)
if __name__=='__main__':
def foobar():
local_var = 42
print 'exists("global_var"):', exists("global_var")
print 'exists("local_var"):', exists("local_var")
print 'exists("baz"):', exists("baz") # undefined
print 'exists("dict"):', exists("dict") # built-in
foobar() # global_var doesn't exist yet
global_var = 'I think, therefore I am'
print 'exists("global_var"):', exists("global_var")
foobar() # now global_var exists