Je n'ai jamais été complètement satisfait de l'exception de Python. Cela fonctionne bien dans la pratique, c'est la théorie qui me dérange. :-) En particulier, parce que tout est dynamique, même si vous savez que evil()
lève seulement ZorgError
lui-même et appelle spam()
ce qui soulève EggsError
, de sorte que tout au plus vous obtenez ces deux erreurs d'un appel à evil()
, quelqu'un pourrait mettre des choses derrière votre dos et changez cela.
Cela dit, certains documents sont meilleurs que d'autres. Par exemple os.kill
peut évidemment augmenter OSError
si le kill
échoue, et TypeError
si vous l'appelez avec quelque chose d'autre que deux nombres entiers, mais saviez-vous qu'il peut également augmenter ?
>>> os.kill(9999999999999, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: signed integer is greater than maximum
Si vous essayez d'écrire raisonnablement code épreuve des balles qui fait des choses comme lire un pid-file et de la sonde pour voir si un processus est en cours d'exécution, il s'avère que vous devez attraper ce OverflowError
au cas où le pid dans le fichier pid est un entier, mais hors de portée. Ce serait bien si cela était dans la documentation (je l'ai trouvé par essais de la torture à la place.)
attraper simplement tout (except:
ou except Exception
) est généralement pas approprié car il attrape habituellement trop (y compris, par exemple, RuntimeError
de un débordement de pile). Alors, comment savez-vous ce qu'il faut attraper? Je pense qu'il serait peut-être bon que les fonctions de feuille dans les bibliothèques standard aient un attribut "exceptions que j'élève directement" ou une exigence de documentation, mais ce n'est tout simplement pas là.
Edit: je l'ai mentionné dans un commentaire ci-dessus que la documentation JSON mentionne explicitement ValueError
. Non explicitement appelé, mais trouvé dans les auto-tests de JSON, sont UnicodeDecodeError
(ce qui est évident une fois que vous y pensez) et AttributeError
(pas si évident). La documentation mentionne également que vous pouvez obtenir un OverflowError
.Bien sûr, si vous utilisez json.dump
, qui prend un flux sur lequel écrire, vous pouvez également obtenir toutes les erreurs du flux. Ce genre de chose est pourquoi une «liste d'exceptions zorg()
soulève directement» n'est pas toujours très utile.
Notez également: la documentation mentionne également 'ValueError'. – torek