존재하지 않는 파이썬 개체의 특성을 요청하면 AttributeError가 표시되지만 오류 개체의 필드 중에서 요청한 특성의 이름을 찾지 못했습니다. 요청 된 속성의 이름을 언급하는 유일한 장소는 args
오류입니다.AttributeError가 참조하는 속성을 결정하는 방법은 무엇입니까?
누락 된 속성의 이름을 얻기 위해 오류 메시지를 구문 분석하는 것이 약간 성가신 것처럼 보입니다. 오류 메시지를 구문 분석하지 않고 누락 된 특성의 이름을 가져 오는 방법이 있습니까?
데모 :
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)
아니요, 없습니다. 왜 어떤 속성에 액세스하려고하는지 알지 못합니까? 예를 들어 동적으로 실행하고 있다고하더라도 'getattr', 당신은'name' 매개 변수를가집니다. – jonrsharpe
@jonrsharpe 무엇을하고 싶으면 '안녕'이'a'에 정의되어 있지 않으면 오류를 억제하는 것입니다. 반면에'hi'_is_가 a에 정의되어 있으면 AttributeError가 내부에 들어올 수 있습니다.이 경우에는이 오류를 더 전파하려고합니다 (내 except 블록에서 다시 올리기). –
정의 된 경우 오류가 * * 발생하지 않습니다. 구체적인 유스 케이스를 줄 수 있을까요? – jonrsharpe