如何在没有异常的情况下检查类成员是否存在

Ang*_*ber 0 python

对于原始类型,我可以使用if in:boolean check.但是如果我使用in语法来检查类成员的存在,我会得到一个NameError异常.有没有办法在Python中检查没有异常?或者是尝试除了块之外的唯一方法吗?

这是我的示例代码.

class myclass:
    i = 0
    def __init__(self, num):
        self.i = num

mylist = [1,2,3]
if 7 in mylist:
    print "found it"
else:
    print "7 not present"  #prints 7 not present


x = myclass(3)
print x.i       #prints 3

#below line NameError: name 'counter' is not defined
if counter in x:
    print "counter in x"
else:
    print "No counter in x"
Run Code Online (Sandbox Code Playgroud)

Bur*_*lid 9

您得到的错误是因为您使用的是counter(名称)而不是'counter'(字符串)。但是,即使您要使用'counter'它也不会按照您的预期运行,您也会得到TypeError: argument of type 'a' is not iterable- 即您无法迭代您的自定义对象。

相反,使用__dict__实例的属性:

>>> class A(object):
...     i = 0
...     def __init__(self, num):
...         self.i = num
...
>>> x = A(3)
>>> x.i
3
>>> 'i' in x.__dict__
True
>>> 'counter' in x.__dict__
False
Run Code Online (Sandbox Code Playgroud)

或者hasattr乔恩指出的更合适。

>>> hasattr(x, 'counter')
False
>>> hasattr(x, 'i')
True
Run Code Online (Sandbox Code Playgroud)


Jon*_*nts 8

你可以使用hasattr

if hasattr(x, 'counter'):
    # whatever
Run Code Online (Sandbox Code Playgroud)