102 votes

Qu'y a-t-il de mal à utiliser un simple "sauf" ?

J'ai essayé de créer une fonction pour vérifier si une image est affichée à l'écran en utilisant PyAutoGui et j'ai trouvé ceci :

def check_image_on_screen(image):
    try:
        pyautogui.locateCenterOnScreen(image)
        return True
    except:
        return False

Et cela fonctionne bien, mais PyCharm me dit que je ne dois pas laisser except nu. Quel est le problème de le laisser ainsi ? Existe-t-il un moyen plus approprié de créer la même fonction ?

2 votes

1 votes

Wikipedia a de bonnes informations à ce sujet - cela s'appelle masquage des erreurs .

3 votes

Je ne suis pas sûr que ce soit une duplication de cela. Il s'agit de la question "Pourquoi ne pas dénuder sauf", alors que l'autre question est "Comment dénuder sauf". A bon La réponse à la seconde répond probablement à la première, mais cela ne fait pas un doublon.

147voto

Adam Smith Points 8269

Bare except attrapera des exceptions que vous ne voulez certainement pas attraper, notamment KeyboardInterrupt (l'utilisateur appuyant sur Ctrl+C) et des erreurs Python telles que SystemExit

Si vous n'avez pas d'exception spécifique à attendre, au moins except Exception qui est le type de base de toutes les exceptions "ordinaires".


Ceci étant dit : vous utilisez except pour récupérer des états de défaillance connus. Un état de défaillance inconnu est généralement irrécupérable, et il est comportement correct pour sortir fatalement dans ces états, ce que l'interpréteur Python fait naturellement avec une exception non attrapée.

Attrapez tout ce que vous savez gérer, et laissez le reste se propager dans la pile d'appels pour voir si quelque chose d'autre peut le gérer. Dans ce cas, l'erreur que vous attendez (par les docs ) est pyautogui.ImageNotFoundException

35voto

Charlie Martin Points 62306

En fait, vous ne profitez pas de la langue pour vous aider à trouver les problèmes. Si vous utilisiez except Exception as ex: vous pourriez faire quelque chose comme enregistrer l'exception et savoir exactement ce qui s'est passé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X