对于原始类型,我可以使用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)
您得到的错误是因为您使用的是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)
| 归档时间: |
|
| 查看次数: |
4654 次 |
| 最近记录: |