<div dir="ltr"><div dir="ltr">Hallo Till,<div><br></div><div><div>das Argument dass der Stacktrace aus der Library nicht Teil der API sein soll finde ich nicht sehr gehaltvoll. Natürlich könnte jemand auf die Idee kommen irgendwie den Stacktrace zu parsen, aber wenn das dann unweigerlich kaputt geht ist der derjenige definitiv selbst Schuld.</div><br class="gmail-Apple-interchange-newline"></div><div>Nach meiner Erfahrung sind alle Maßnahmen die im Fehlerfall den Kontext reduzieren exzellent dazu geeignet sich beim Debugging das Leben schwer zu machen.</div><div><br></div><div>Der vollständige Stacktrace ist natürlich für einen nicht-technischen Endanwender wenig hilfreich und im Falle einer Web-Applikation ggf. sogar ein Sicherheitsrisiko. Für's Debugging ist er aber unentbehrlich und sollte deshalb wenn immer möglich festgehalten werden.<br></div><div><br></div><div>Die String-Respräsentation einer Exception ist normalerweise nur die Message, und die ist manchmal erstaunlich wenig aussagekräftig. Ein kleines Beispiel:</div><div><br></div><div>try:</div><div>    d = {}</div><div>    print(d['x'])</div><div><div>except Exception as e:</div><div>     logger.error('An error occurred: %s', e)</div><div><br></div><div>Output: 'An error occurred: x'</div></div><div><br></div><div>Good luck with that!</div><div><br></div><div>Von meiner Seite deshalb ein klares -1 für raise from None.</div><div><br></div><div>Grüße,</div><div>Daniel</div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 17, 2019 at 1:17 PM Till Maas <<a href="mailto:opensource@till.name">opensource@till.name</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
in einem Python-Projekt an dem ich mitwirke ist aufgefallen, dass der<br>
Default-Python3-Exception-Handler bei Ketten von Exceptions ausgibt,<br>
welche Exceptions zuvor aufgetreten sind, Beispiel:<br>
<br>
Traceback (most recent call last):<br>
  File "/home/fge/Source/nmstate/libnmstate/nm/checkpoint.py", line 125, in destroy<br>
    self._manager.interface.CheckpointDestroy(self._dbuspath)<br>
  File "/usr/lib64/python3.7/site-packages/dbus/proxies.py", line 70, in __call__<br>
    return self._proxy_method(*args, **keywords)<br>
  File "/usr/lib64/python3.7/site-packages/dbus/proxies.py", line 145, in __call__<br>
    **keywords)<br>
  File "/usr/lib64/python3.7/site-packages/dbus/connection.py", line 651, in call_blocking<br>
    message, timeout)<br>
dbus.exceptions.DBusException: org.freedesktop.NetworkManager.InvalidArguments: checkpoint /org/freedesktop/NetworkManager/Checkpoint/7 does not exist<br>
<br>
During handling of the above exception, another exception occurred:<br>
<br>
Traceback (most recent call last):<br>
  File "/home/fge/Source/nmstate/libnmstate/netapplier.py", line 72, in commit<br>
    nmcheckpoint.destroy()<br>
  File "/home/fge/Source/nmstate/libnmstate/nm/checkpoint.py", line 127, in destroy<br>
    raise NMCheckPointError(str(e))<br>
libnmstate.nm.checkpoint.NMCheckPointError: org.freedesktop.NetworkManager.InvalidArguments: checkpoint /org/freedesktop/NetworkManager/Checkpoint/7 does not exist<br>
<br>
<br>
Für mich sieht das sehr nützlich aus. Mein Mitstreiter hat allerdings<br>
Bedenken, weil dies ja interne Details ausgibt (statt nur der Exception,<br>
die Teil der API ist) und schlägt vor, die zu unterbinden mit<br>
<br>
raise from None<br>
<br>
Was sind Eure Erfahrungen/Meinungen dazu? Ist `raise from None` sinnvoll<br>
oder nicht? Ich habe eher das Gefühl, dass nicht.<br>
<br>
Falles es Euch interessiert, Details gibt es hier:<br>
<a href="https://github.com/nmstate/nmstate/pull/317#issuecomment-483901082" rel="noreferrer" target="_blank">https://github.com/nmstate/nmstate/pull/317#issuecomment-483901082</a><br>
<br>
Viele Grüße<br>
Till<br>
________________________________________<br>
<br>
Diese Mail erhalten Sie ueber die Mailingliste python-users der Universitaet zu Koeln<br>
Nachrichten an: <a href="mailto:python-users@uni-koeln.de" target="_blank">python-users@uni-koeln.de</a><br>
Abonnement und Benutzereinstellungen: <a href="https://lists.uni-koeln.de/mailman/listinfo/python-users" rel="noreferrer" target="_blank">https://lists.uni-koeln.de/mailman/listinfo/python-users</a><br>
Listenarchiv: <a href="https://lists.uni-koeln.de/pipermail/python-users/" rel="noreferrer" target="_blank">https://lists.uni-koeln.de/pipermail/python-users/</a><br>
<br>
pyCologne Homepage: <a href="http://pycologne.de/" rel="noreferrer" target="_blank">http://pycologne.de/</a><br>
</blockquote></div>