Yerleşik hataların belgelerine bakarsanız, çoğu Exception
sı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 IOError
ve OSError
) birinci argümanına sahiptir errno
, ikincisi strerror
. Yok message
... strerror
normalde a olacağına kabaca benzeşmez message
.
Daha genel olarak, alt sınıfları Exception
istediklerini yapabilir. Bir message
öznitelikleri olabilir veya olmayabilir . Gelecekteki yerleşik e-postaların Exception
bir 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, Exception
yakalamak istediğiniz belirli alt sınıfları tanımlamak ve sonra bir ile her şey yerine sadece bunları yakalamak ve ardından except Exception
belirli 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 message
niteliğ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
.