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

Till Maas opensource at till.name
Mi Apr 17 13:17:28 CEST 2019


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


Mehr Informationen über die Mailingliste python-users