Python - à l'exception (OSError, e) - Ne travaille plus dans 3.3.3?
Les personnes suivantes ont travaillé tout au long de Python 3.X et n'est pas cassé en 3.3.3, ne peut pas trouver ce qui a changé dans les 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
Essayé différentes variantes de la à l'exception de la ligne, par exemple except OSError as e:
mais alors errno.EPERM
pauses etc.
Tout rapide pointeurs?
OriginalL'auteur Torxed | 2013-12-11
Vous devez vous connecter pour publier un commentaire.
L'expression
except (OSError, e)
jamais travaillé en Python, pas dans la façon dont vous pensez que cela fonctionne. Que l'expresion des captures deux types d'exception;OSError
ou quel que soit le mondiale
se réfère. Votre code s'arrête quand il n'y a pas de nom globale
.L'expression correcte pour Python 3 et la version 2.6 de Python et la plus récente est:
Python 2 prend également en charge la syntaxe:
sans parenthèse, ou:
pour attraper plus d'un type. La syntaxe est très déroutant, comme vous l'avez découvert ici.
La modification a été ajoutée dans la version 2.6 de Python et jusqu', voir PEP 3110 - d'intercepter les Exceptions en Python 3000 et la Exception-gestion des changements de section de la 2.6 Ce qui est Nouveau document.
Comme une exception pour
errno.EPERM
; vous n'avez pas d'importererrno
, ce qui est unNameError
.import errno
, qui a été la cause de racine et de nouveau une question stupide de ma part, et j'ai passé quelques heures sur.. Quelle est la différence entre(OSError, e)
etX as Y
? Edit: Merci pour clairifying la syntaxe de!X, Y (sans parenthèse) a été remplacé par
except X as Y
, parce qu'il était trop proche deexcept (X, Y)
, qui signifie "attraper un de ces deux types".Oui je le vois/le comprends maintenant, la réponse est simple une fois que vous avez en face de vous, ce qui rend la question plutôt bête. Désolé de vous déranger et merci pour la réponse, m'a ouvert les yeux un peu 🙂
Merci!!!! C'est en 2018 et Dropbox n'a toujours pas pris la peine de corriger cela!
ce fichier utilise le Python 2 syntaxe, pas de parenthèses. De sorte que le code fonctionne correctement sous les anciennes Python 2 versions, y compris Python 2.5. C'est probablement délibérée.
OriginalL'auteur Martijn Pieters