Python: Hoe een uitzondering negeren en doorgaan? [DUPLICEER]

Ik heb het eens … behalve blok in mijn code en wanneer een uitzondering is gooien. Ik wil echt gewoon doorgaan met de code omdat alles in dat geval nog steeds in staat is om prima te rennen. Het probleem is als je het behalve gaat: blokkeren leeg of met een #do niets, het geeft je een syntaxisfout. Ik kan niet gebruiken, omdat het niet in een lus is. Is er een trefwoord dat ik kan gebruiken die de code vertelt om gewoon door te gaan?


Antwoord 1, Autoriteit 100%

except Exception:
    pass

Python Docs voor de PASS-statement


Antwoord 2, Autoriteit 44%

Generic Antwoord

De standaard “NOP” in Python is de passVerklaring:

try:
    do_something()
except Exception:
    pass

Met behulp van except Exceptionin plaats van een kale exceptvermijd het vangen van uitzonderingen zoals SystemExit, KeyboardInterruptETC.

Python 2

Vanwege de laatste gooide uitzondering die in Python 2 wordt herinnerd, worden sommige van de objecten die betrokken zijn bij de uitzondering-werperingsverklaring voor onbepaalde tijd (eigenlijk, tot de volgende uitzondering). In het geval dit belangrijk is voor u en (meestal) hoeft u de laatste gooide uitzondering niet te onthouden, wilt u misschien het volgende doen in plaats van pass:

try:
    do_something()
except Exception:
    sys.exc_clear()

Hiermee wordt de laatste gooide uitzondering gewist.

Python 3

In Python 3 wordt de variabele die de uitzonderingsinstantie bevat verwijderdbij het verlaten van het except-blok. Zelfs als de variabele eerder een waarde had, wordt het na het invoeren en verlaten van het except-blok weer undefined.


Antwoord 3, autoriteit 34%

Er is een nieuwe manier om dit te doen in Python 3.4:

from contextlib import suppress
with suppress(Exception):
  # your code

Hier is de commit die het heeft toegevoegd: http://hg.python.org/cpython/rev /406b47c64480

En hier is de auteur, Raymond Hettinger, die hierover en allerlei andere Python-hotness praat (relevant stukje om 43:30): http://www.youtube.com/watch?v=OSGv2VnC0go

Als u het kale excepttrefwoord wilt emuleren en ook dingen als KeyboardInterruptwilt negeren, hoewel u dat meestal niet doet, kunt u with suppress(BaseException).

Bewerken: het lijkt erop dat ignoredis hernoemd naar suppressvóór de 3.4-release.


Antwoord 4, autoriteit 3%

Probeer dit:

try:
    blah()
except:
    pass

Other episodes