Python 如何确定AttributeError引用的属性?
当我请求一个不存在的python对象的属性时,我会得到一个AttributeError,但是我在error对象的字段中没有找到所请求属性的名称。唯一提到请求属性名称的地方是错误的Python 如何确定AttributeError引用的属性?,python,exception,error-handling,standard-library,anti-patterns,Python,Exception,Error Handling,Standard Library,Anti Patterns,当我请求一个不存在的python对象的属性时,我会得到一个AttributeError,但是我在error对象的字段中没有找到所请求属性的名称。唯一提到请求属性名称的地方是错误的args成员 在我看来,解析错误消息以获取缺少的属性的名称有点麻烦。是否有任何方法可以在不解析错误消息的情况下获取缺少的属性的名称 演示: 目前还没有统一的方法来做到这一点。该功能已在中提出 目前还没有统一的方法。该功能已在中提出 它仍然是草稿不,没有。为什么不知道要访问的属性?即使您使用例如getattr动态执行此操作
args
成员
在我看来,解析错误消息以获取缺少的属性的名称有点麻烦。是否有任何方法可以在不解析错误消息的情况下获取缺少的属性的名称
演示:
目前还没有统一的方法来做到这一点。该功能已在中提出
目前还没有统一的方法。该功能已在中提出
它仍然是草稿不,没有。为什么不知道要访问的属性?即使您使用例如
getattr
动态执行此操作,您也有name
参数。@jonrsharpe如果a
中未定义hi
,我想做的是抑制此错误。另一方面,如果a中定义了hi
,则它可能在内部引发AttributeError,在这种情况下,我希望进一步传播此错误(在我的except块中重新引发)。如果已定义,则不会出现错误。能否给出一个具体的用例?@jornsharpe如果定义了hi
,并且抛出了AttributeError本身(在它的主体中),那么就无法区分AttributeError是由于缺少hi
还是由于缺少hi
中所需的其他内容。我需要解析错误中的错误消息来理解它。这里有一个演示:我指的是你实际上试图解决的问题,而不是那些做作的东西。但是你有你喜欢的答案,所以没关系。不,没有。为什么不知道要访问的属性?即使您使用例如getattr
动态执行此操作,您也有name
参数。@jonrsharpe如果a
中未定义hi
,我想做的是抑制此错误。另一方面,如果a中定义了hi
,则它可能在内部引发AttributeError,在这种情况下,我希望进一步传播此错误(在我的except块中重新引发)。如果已定义,则不会出现错误。能否给出一个具体的用例?@jornsharpe如果定义了hi
,并且抛出了AttributeError本身(在它的主体中),那么就无法区分AttributeError是由于缺少hi
还是由于缺少hi
中所需的其他内容。我需要解析错误中的错误消息来理解它。这里有一个演示:我指的是你实际上试图解决的问题,而不是那些做作的东西。但是你有你喜欢的答案,所以没关系。@anton你有,它说“AttributeError
:target,attribute”@anton你有,它说“AttributeError
:target,attribute”
class A:
def f(self):
print('in A')
class B:
pass
class C:
def f(self):
print('in C')
raise AttributeError()
def call_f(o):
try:
o.f()
except AttributeError as e:
# instead of e.args[0].endswith("'f'") it would be nice to do
# e.missing_attribute == 'f'
if e.args and e.args[0].endswith("'f'"):
print(e.args) # prints ("'B' object has no attribute 'f'",)
else: raise
if __name__ == '__main__':
a = A()
b = B()
c = C()
call_f(a)
call_f(b)
call_f(c)