web-dev-qa-db-fra.com

python 3 try-sauf tous avec erreur

Est-il possible de faire un essai - sauf intercepter tout ce qui montre encore l'erreur sans attraper toutes les exceptions possibles? J'ai un cas où des exceptions se produiraient une fois par jour tous les quelques jours dans un script fonctionnant 24h/24 et 7j/7. Je ne peux pas laisser le script mourir, mais ils ne comptent pas non plus, car il réessaye peu importe le temps que j'essaie, à l'exception de tout. Ainsi, même si je recherche les dernières rares exceptions, je souhaite les consigner dans un fichier pour un débogage ultérieur.

exemple:

try:
    print(555)
except:
    print("type error: "+ str(the_error))

Un moyen de remplacer the_error avec une trace de pile ou quelque chose de similaire?

37
Ryan Mills

Oui, vous pouvez intercepter toutes les erreurs comme ceci:

try:
    print(555)
except Exception as e:
    print("type error: " + str(e))

Pour la trace de la pile, j'utilise généralement le module traceback :

import traceback

try:
    print(555)
except Exception as e:
    print("type error: " + str(e))
    print(traceback.format_exc())
79
Cyzanfar

Tu peux faire:

   try:
       print(555)
   except Exception as err:
      print("Erro {}".format(err))

Ou utilisez augmenter

Doc's sont toujours vos amis

Astuce: évitez d'utiliser "sauf:"

Utilisez quelque chose de plus descriptif comme

...
except (ValueErro, KeyError):

À moins que votre code ne soit très bien testé, vous ne pouvez pas résoudre toutes les erreurs.

9
Joao Vitorino