9
votes

Manipulation des exceptions spécifiques aux fenêtres de manière indépendante de la plate-forme

Considérez l'exception python suivante: xxx

Je veux gérer cette exception particulière - c'est-à-dire, WindowsError avec le numéro d'erreur 267. Cependant, je ne peux pas simplement faire ce qui suit: < Pré> xxx

car cela ne fonctionnerait pas sur des systèmes UNIX où WindowError n'est même pas défini dans le module Exceptions.

Y a-t-il un moyen élégant de gérer cette erreur?


1 commentaires

3 Réponses :


7
votes

Voici ma solution actuelle, mais je méprise légèrement en utilisant du code non trivial dans un bloc sauf le bloc: xxx


0 commentaires

15
votes

Si vous avez besoin d'attraper une exception avec un nom qui pourrait ne pas toujours exister, puis la créez:

if not getattr(__builtins__, "WindowsError", None):
    class WindowsError(OSError): pass

try:
    do()
except WindowsError, e:
    print "error"


0 commentaires

1
votes

La réponse de Maynard de @glenn n'autorise pas le débogage avec la PDB car WindowsError intégré n'est pas disponible dans le débogueur. Ce bloc de code fonctionnera à l'intérieur du débogueur Python et lors de l'exécution normale:

try:
    from exceptions import WindowsError
except ImportError:
    class WindowsError(OSError): pass


1 commentaires

Soyez conseillé aux exceptions Python 2 mais pas python 3