Python尝试多条语句处理相同错误
我正在尝试根据一个对象是否有属性来设置一些布尔值:
try:
att1 = myobj.att1
att2 = myobj.att2
att3 = myobj.att3
except AttributeError:
pass
但是,如果att1
不存在并且抛出了一个AttributeError
错误,它就不会尝试检查其他两个属性。我必须用循环吗?难道没有办法在一个try
语句中完成吗?
谢谢!
5 个回答
0
你是想用这个方法来检查某个对象是否有属性吗?如果是这样的话,可以直接使用内置的函数 hasattr
(其实这个函数做的测试和你手动实现的功能是一样的)。
如果不是,那你就得用循环了。
想想代码的结构,其实你真正想要的是三个 try...except 块——毕竟,如果异常处理后能返回到它们被抛出的地方,那就不算是异常了!
不过,写一个循环其实很简单:
atts = []
for attr in ("att1", "att2", "att3"):
try:
attrs.append(getattr(myobj, attr))
except AttributeError:
attrs.append[None]
att1, att2, att3 = atts
如果你真的想把属性作为局部变量使用,甚至可以这样做:
for attr in ("att1", "att2", "att3"):
try:
locals()[attr] = getattr(myobj, attr)
except AttributeError:
pass
3
为什么不直接这样做呢:
your_boolean = hasattr(obj, att1) or hasattr(obj, att2) or hasattr(obj, att3)
1
这里不需要使用try语句。比如说:
myobj = 10
names = ['att1', 'att2', 'att3', 'real']
results = dict((name, getattr(myobj, name, None)) for name in names)
#{'real': 10, 'att3': None, 'att2': None, 'att1': None}