<强>可能重复:结果   简单的方法来检查该变量在python定义<? / A>结果   如何检查是否在Python中存在的变量?

你怎么知道是否一个变量在某一特定地点的代码在运行时是否已确定?因为(1)的变量可以被有条件地设置,和(2)的变量可以被有条件地删除,这并不总是明显的。我正在寻找在Perl类似defined()isset()在PHP或defined?在Ruby中。

if condition:
    a = 42

# is "a" defined here?

if other_condition:
    del a

# is "a" defined here?
有帮助吗?

解决方案

try:
    thevariable
except NameError:
    print("well, it WASN'T defined after all!")
else:
    print("sure, it was defined.")

其他提示

'a' in vars() or 'a' in globals()

如果你想成为迂腐,你可以检查内建太结果 'a' in vars(__builtins__)

我觉得这是更好地避免这种情况。它的清洁和更清晰的写的:

a = None
if condition:
    a = 42
try:
    a # does a exist in the current namespace
except NameError:
    a = 10 # nope

一种可能的情况,其中,这可能需要:

如果您使用finally块靠近的连接,但在try块,与所述连接之前sys.exit()程序退出定义。在这种情况下,finally块将被调用,因为没有连接被创建的连接闭合语句将失败。

对于这种特殊的情况下,最好做a = None代替del a的。这将递减引用计数对象a为(如果有的话)分配到并没有定义a时不会失败。请注意,这del语句不直接调用对象的析构函数,但变量解除绑定。当参考计数变为零对象的析构函数被调用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top