Handhabung von Windows-spezifischen Ausnahmen in der Plattform-unabhängigen Weg
Betrachten Sie das folgende Python-Ausnahme:
[...]
f.extractall()
File "C:\Python26\lib\zipfile.py", line 935, in extractall
self.extract(zipinfo, path, pwd)
File "C:\Python26\lib\zipfile.py", line 923, in extract
return self._extract_member(member, path, pwd)
File "C:\Python26\lib\zipfile.py", line 957, in _extract_member
os.makedirs(upperdirs)
File "C:\Python26\lib\os.py", line 157, in makedirs
mkdir(name, mode)
WindowsError: [Error 267] The directory name is invalid: 'C:\\HOME\\as\
\pypm-infinitude\\scratch\\b\\slut-0.9.0.zip.work\\slut-0.9\\aux'
Ich verarbeiten wollen, diese Besondere Ausnahme - d.h., WindowsError mit Fehler Nummer 267. Allerdings kann ich nicht einfach Folgendes machen:
try:
do()
except WindowsError, e:
...
Weil das nicht funktionieren würde, auf Unix-Systemen, wo WindowsError ist nicht einmal definiert, in der Ausnahmen-Modul.
Ist es ein eleganter Weg, um behandeln Sie diese Fehler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen, um eine Ausnahme mit einem Namen, der vielleicht nicht immer existieren, dann müssen Sie es erstellen:
Wenn Sie auf Windows verwenden Sie die real-WindowsError-Klasse und die exception fangen. Wenn Sie nicht sind, werden Sie erstellen eine WindowsError-Klasse, wird nie erhöht werden, damit die Ausnahme-Klausel verursacht keine Fehler, und die except-Klausel wird nie aufgerufen werden.
Hier ist meine aktuelle Lösung, aber ich etwas verachten, mit nicht-trivialen code in ein außer-block:
@Glenn Maynard 's Antwort lässt nicht Debuggen mit pdb wie die WindowsError builtin ist nicht verfügbar in den debugger. Dieser code-block wird die Arbeit innerhalb der Python-debugger und während der normalen Ausführung:
Diese Lösung auch funktioniert und vermeidet string-Literale und ein einspielen des full Ausnahmen Bibliothek: