Yerleşik hataların belgelerine bakarsanız, çoğu Exceptionsınıfın ilk bağımsız değişkenini bir messageöznitelik olarak atadığını görürsünüz . Yine de hepsi yapmıyor.
Özellikle, EnvironmentError(alt sınıflarla IOErrorve OSError) birinci argümanına sahiptir errno, ikincisi strerror. Yok message... strerrornormalde a olacağına kabaca benzeşmez message.
Daha genel olarak, alt sınıfları Exceptionistediklerini yapabilir. Bir messageöznitelikleri olabilir veya olmayabilir . Gelecekteki yerleşik e-postaların Exceptionbir messageözniteliği olmayabilir . ExceptionÜçüncü taraf kitaplıklarından veya kullanıcı kodundan içe aktarılan herhangi bir alt sınıfın bir messageözniteliği olmayabilir .
Bence bunu ele almanın doğru yolu, Exceptionyakalamak istediğiniz belirli alt sınıfları tanımlamak ve sonra bir ile her şey yerine sadece bunları yakalamak ve ardından except Exceptionbelirli alt sınıfın istediğiniz şekilde tanımladığı nitelikleri kullanmaktır.
Bir printşey yapmanız gerekiyorsa , bence yakalanan Exceptionşeyi basmanın, bir messageniteliği olsun ya da olmasın , istediğiniz şeyi yapma olasılığı yüksektir .
İsterseniz mesaj özniteliğini de kontrol edebilirsiniz, bunun gibi, ancak dağınık göründüğü için gerçekten önermem:
try:
pass
except Exception as e:
if hasattr(e, 'message'):
print(e.message)
else:
print(e)
except Foo as bar:aynıdırexcept Foo, bar:(eski daha yeni ve 3.x'te çalışmaya devam edecek) ile aynıdırmessage.