herhangi bir yükseltilmiş nesneyi (yani, Exception
'u genişletmeyen bir tür) nasıl yakalayabildiğimi merak ediyorum ve yine de ona bir başvuru olsun.Python'da bir istisna nasıl yakalanır ve istisna ile ilgili bir referans alırsınız.
Jython'u kullanırken bunu yapma arzusuna rastladım. Java yöntemini ararken bu yöntem bir istisna tutarsa, bu Python'un Exception
sınıfını uzatmaz, bu nedenle böyle bir blok yakalamak olmaz:
try:
# some call to a java lib that raises an exception here
except Exception, e:
# will never be entered
Bunu yapabilirim, ama sonra hiçbir erişebilir yükseltilen istisna nesnesi.
try:
# some call to a java lib that raises an exception here
except:
# will enter here, but there's no reference to the exception that was raised
Java istisna tipini ithal ve açıkça yakalayarak bu çözebilir, ancak bu imkansız/zor jenerik istisna işleme sarmalayıcıları/dekoratörler yazmak için yapar
.
Bazı keyfi istisnaları yakalamanın ve hala except
bloğundaki referansa ulaşmanın bir yolu var mı?
numaralı belgeyi not etmeliyim ki, yalnızca Jython projeleriyle değil, Python projeleriyle kullanabileceğim istisna işleme dekoratörünü umuyorum. java.lang.Exception
'u içe aktarmaktan kaçınmak istiyorum çünkü bu sadece Jython-only. Örneğin, bunun gibi bir şey yapabileceğimi düşünüyorum (ama denemedim), ama eğer yapabilirsem kaçınmak isterim.
try:
# some function that may be running jython and may raise a java exception
except (Exception, java.lang.Exception), e:
# I imagine this would work, but it makes the code jython-only
BaseException kaynaklanıyor en azından bu istisnaları mı yakalayacak? – Seth