Wiem, że jeśli chcę ponownie zgłosić wyjątek, po prostu używam raise
bez argumentów w odpowiednim except
bloku. Ale biorąc pod uwagę zagnieżdżone wyrażenie, takie jak
try:
something()
except SomeError as e:
try:
plan_B()
except AlsoFailsError:
raise e # I'd like to raise the SomeError as if plan_B()
# didn't raise the AlsoFailsError
jak mogę ponownie podbić SomeError
bez przerywania śledzenia stosu? raise
sam w tym przypadku ponownie podniósłby nowsze AlsoFailsError
. Albo jak mogę zmienić kod, aby uniknąć tego problemu?
plan_B
inną funkcję, która zwracaTrue
po sukcesie iFalse
po wyjątku? Wtedy zewnętrznyexcept
blok mógłby być po prostuif not try_plan_B(): raise