Musisz zrobić to oddzielnetry
bloki:
try:
code a
except ExplicitException:
pass
try:
code b
except ExplicitException:
try:
code c
except ExplicitException:
try:
code d
except ExplicitException:
pass
Zakłada chcesz uruchomić code c
tylko jeśli code b
powiodło się.
Jeśli trzeba uruchomić code c
niezależnie, trzeba umieścić try
bloki jeden po drugim:
try:
code a
except ExplicitException:
pass
try:
code b
except ExplicitException:
pass
try:
code c
except ExplicitException:
pass
try:
code d
except ExplicitException:
pass
Używam except ExplicitException
tutaj, ponieważ jest nigdy dobra praktyka, aby ślepo zignoruj wszystkie wyjątki. Zignorujesz także: MemoryError
, ,i SystemExit
, w przeciwnym razie, które normalnie nie chcesz ignorować ani przechwytywać bez pewnego rodzaju ponownego podniesienia lub świadomego powodu do ich obsługi.
być jawne, chcesz 'Kod C' do wykonania * tylko wtedy, gdy kod b zgłasza wyjątek *? –
Wszystkie kody powinny być uruchamiane w jednym bloku try, nawet jeśli podnoszą wyjątek. – arvidurs
Nie możesz tego mieć. Blok "try" nie służy do tłumienia wyjątków we wszystkich wykonywanych kodach. Pozwoli ci to * złapać * wyjątek, kiedy to się stanie, ale reszta bloku nigdy nie zostanie wykonana. –