Python - Ausnahme (OSError, e) - Nicht mehr arbeiten 3.3.3?
Folgenden gearbeitet haben, während Python 3.X und wird auch nicht gebrochen in 3.3.3, nicht finden können, was hat sich geändert in den docs.
import os
def pid_alive(pid):
pid = int(pid)
if pid < 0:
return False
try:
os.kill(pid, 0)
except (OSError, e):
return e.errno == errno.EPERM
else:
return True
Versucht, verschiedene Variationen der außer-Linie, zum Beispiel except OSError as e:
aber dann errno.EPERM
Pausen usw.
Schnelle Hinweise?
InformationsquelleAutor Torxed | 2013-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Ausdruck
except (OSError, e)
nie arbeitete in Python, nicht in der Weise, die Sie denken, dass es funktioniert. Das expresion fängt zwei Arten von Ausnahme;OSError
oder was auch immer die Globalee
verweist. Dein code bricht, wenn es keine globalen Namene
.Den richtigen Ausdruck für Python 3 und Python 2.6 und höher ist:
Python-2 unterstützt auch die syntax:
ohne Klammer, oder:
zu fangen, mehr als einen Typ. Die syntax war sehr verwirrend, wie du dich hier entdeckt.
Die änderung wurde in Python 2.6, siehe PEP 3110 - Abfangen von Ausnahmen in Python 3000 und die Ausnahme-Handhabung von änderungen Abschnitt der 2.6 Was ist Neu Dokument.
Als für eine Ausnahme für
errno.EPERM
; Sie hat nicht importierenerrno
, so dass einNameError
als gut.import errno
wie gut, dass war die Ursache zu finden und wieder eine dumme Frage meinerseits, die ich verbrachte ein paar Stunden auf.. Was ist der Unterschied zwischen(OSError, e)
undX as Y
? Edit: Danke für clairifying die syntax!X, Y (ohne - Klammer) wurde ersetzt durch
except X as Y
, weil es zu nah war, umexcept (X, Y)
, was bedeutet 'fangen, diese beiden - Typen".Ja, ich es sehen/verstehen Sie nun, eine einfache Antwort, wenn Sie es bekommen vor Ihnen, das macht die Frage ziemlich albern. Tut mir Leid, Sie zu stören, und danke für die Antwort, öffnete meine Augen ein bisschen 🙂
Danke!!! Es ist 2018 und Dropbox hat sich noch nicht darum gekümmert zu beheben!
die Datei verwendet die gültige Python 2-syntax, keine Klammern. So funktioniert der code korrekt unter älteren Python-2-Versionen, einschließlich Python 2.5. Das ist wahrscheinlich auch so gewollt.
InformationsquelleAutor Martijn Pieters