내장 오류 에 대한 문서를 보면 대부분의 Exception클래스가 첫 번째 인수를 message속성 으로 할당하는 것을 볼 수 있습니다. 하지만 모두가 그렇게하는 것은 아닙니다.
특히 EnvironmentError(하위 클래스 IOError및 OSError)에는의 첫 번째 인수 errno,의 두 번째 인수 가 strerror있습니다. 없습니다 message... strerror일반적으로 message.
보다 일반적으로의 하위 클래스는 Exception원하는 모든 작업을 수행 할 수 있습니다. message속성 이있을 수도 있고 없을 수도 있습니다 . 향후 내장 Exception에 message속성 이 없을 수 있습니다 . Exception타사 라이브러리 또는 사용자 코드에서 가져온 모든 하위 클래스에는 message속성 이 없을 수 있습니다 .
이를 처리하는 적절한 방법은 Exception잡으려 는 특정 하위 클래스 를 식별 한 다음를 사용하여 모든 것 대신 해당 하위 클래스 만 잡은 except Exception다음 원하는대로 특정 하위 클래스가 정의하는 속성을 활용하는 것입니다.
당신이 print무언가 를해야한다면 , 나는 그것이 속성 Exception이 있든 없든, 당신이 원하는 것을 할 가능성이 가장 높다고 생각합니다 message.
원하는 경우 메시지 속성을 확인할 수도 있습니다. 이처럼 복잡해 보이기 때문에 실제로 제안하지는 않습니다.
try:
pass
except Exception as e:
if hasattr(e, 'message'):
print(e.message)
else:
print(e)
except Foo as bar:동일합니다except Foo, bar:(전자는 더 새롭고 3.x에서 계속 작동합니다)message.