[Python-de] Exception erneut werfen (re-raise)

Christian Barthel bch at online.de
So Jun 23 07:04:48 EDT 2019


Ich habe einen Code-Auszug der eine HTTP Bibliothek (requests
Modul) nutzt.  Diese wirft unterschiedliche Exceptions die ich
auffange.  Ich würde aber gerne die Exception an dieser Stelle
noch nicht fangen, sondern im Prinzip an den Aufrufer weitergeben
damit ich dann alle Exceptions in der Hauptschleife zentral
fangen kann und Loggen kann.

Dies geht; allerdings verliere ich dann die Möglichkeit auf die
lokalen Variablen der innersten Funktion (dort wo der Request
erzeugt und konstruiert wird) zuzugreifen.

Meine Idee im Moment wäre mittels "raise .. from.." eine neue
Exception zu generieren und die zusätzlichen Parameter als
Argumente mitzugeben.  Illustrativ und vereinfacht würde das in
etwa so aussehen:
 
   def foo():
       assert 0 == 1
   
   def bar():
       someVar = .. 
       try:
           foo()
       except AssertionError as e:
           raise AssertionError('foo ' + str(foo)) from e
   
Somit kann ein Aufrufer von bar() die Belegung von foo in einer
Fehlermeldung einbauen und die Daten der Ursprünglichen Exception
sind weiter vorhanden.   Mich würde interessieren ob es eine
Alternative oder einfachere Möglichkeit dazu geben würde und wie
(erfahrenere) Python Programmierer das lösen würden?

-- 
Christian Barthel <bch at online.de>


Mehr Informationen über die Mailingliste python-de