[python-users] Python3 - Exception-Context überschreiben/raise from - gut oder schlecht?

Klaus Bremer klaus.bremer at bmcct.de
Mi Apr 17 14:14:34 CEST 2019


Im Fehlerfall gibt es nichts besseres als einen aussagefähigen Traceback. In Bezug auf die spätere Nutzung halte ich die Bedenken deines Mitstreiters für berechtigt, wenn dies, wie bei Webanwendungen, ein Sicherheitsrisiko darstellen kann. 

Web-Anwendungen lösen das Problem durch einen debug-mode, der den vollen Traceback entweder an den User durchreicht oder nur einen Fehlercode auslöst, dabei aber den Traceback in eine Logdatei schreibt. Ob das eine Lösung ist, hängt davon ab, ob der Code beim Kunden oder woanders ausgeführt wird. Im ersteren Fall habt ihr ohnehin keine Möglichkeit Internas zu verbergen.

Gruß
Klaus


> Am 17.04.2019 um 13:17 schrieb Till Maas <opensource at till.name>:
> 
> Hi,
> 
> in einem Python-Projekt an dem ich mitwirke ist aufgefallen, dass der
> Default-Python3-Exception-Handler bei Ketten von Exceptions ausgibt,
> welche Exceptions zuvor aufgetreten sind, Beispiel:
> 
> Traceback (most recent call last):
>  File "/home/fge/Source/nmstate/libnmstate/nm/checkpoint.py", line 125, in destroy
>    self._manager.interface.CheckpointDestroy(self._dbuspath)
>  File "/usr/lib64/python3.7/site-packages/dbus/proxies.py", line 70, in __call__
>    return self._proxy_method(*args, **keywords)
>  File "/usr/lib64/python3.7/site-packages/dbus/proxies.py", line 145, in __call__
>    **keywords)
>  File "/usr/lib64/python3.7/site-packages/dbus/connection.py", line 651, in call_blocking
>    message, timeout)
> dbus.exceptions.DBusException: org.freedesktop.NetworkManager.InvalidArguments: checkpoint /org/freedesktop/NetworkManager/Checkpoint/7 does not exist
> 
> During handling of the above exception, another exception occurred:
> 
> Traceback (most recent call last):
>  File "/home/fge/Source/nmstate/libnmstate/netapplier.py", line 72, in commit
>    nmcheckpoint.destroy()
>  File "/home/fge/Source/nmstate/libnmstate/nm/checkpoint.py", line 127, in destroy
>    raise NMCheckPointError(str(e))
> libnmstate.nm.checkpoint.NMCheckPointError: org.freedesktop.NetworkManager.InvalidArguments: checkpoint /org/freedesktop/NetworkManager/Checkpoint/7 does not exist
> 
> 
> Für mich sieht das sehr nützlich aus. Mein Mitstreiter hat allerdings
> Bedenken, weil dies ja interne Details ausgibt (statt nur der Exception,
> die Teil der API ist) und schlägt vor, die zu unterbinden mit
> 
> raise from None
> 
> Was sind Eure Erfahrungen/Meinungen dazu? Ist `raise from None` sinnvoll
> oder nicht? Ich habe eher das Gefühl, dass nicht.
> 
> Falles es Euch interessiert, Details gibt es hier:
> https://github.com/nmstate/nmstate/pull/317#issuecomment-483901082
> 
> Viele Grüße
> Till
> ________________________________________
> 
> Diese Mail erhalten Sie ueber die Mailingliste python-users der Universitaet zu Koeln
> Nachrichten an: python-users at uni-koeln.de
> Abonnement und Benutzereinstellungen: https://lists.uni-koeln.de/mailman/listinfo/python-users
> Listenarchiv: https://lists.uni-koeln.de/pipermail/python-users/
> 
> pyCologne Homepage: http://pycologne.de/



Mehr Informationen über die Mailingliste python-users