python sys.la sortie ne fonctionne pas en essayer [dupliquer]

Cette question a déjà une réponse ici:

Python 2.7.5 (default, Feb 26 2014, 13:43:17)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> try:
...  sys.exit()
... except:
...  print "in except"
...
in except
>>> try:
...  sys.exit(0)
... except:
...  print "in except"
...
in except
>>> try:
...  sys.exit(1)
... except:
...  print "in except"
...
in except

Pourquoi Je ne suis pas capable de déclencher sys.exit() dans essayer, toutes les suggestions...!!!

le code affiché ici contient tous les détails de la version.

j'ai essayé toutes les façons possibles je sais pour le déclencher, mais j'ai échoué. Il arrive à 'exception de' bloquer.

Merci d'avance..

11
demandé sur Martijn Pieters 2014-09-18 10:42:35

2 réponses

sys.exit() soulève une exception, à savoir SystemExit. C'est pour ça que tu atterris dans la zone!--5-->-bloc.

par exemple:

import sys

try:
    sys.exit()
except:
    print(sys.exc_info()[0])

Cela vous donne:

<type 'exceptions.SystemExit'>

bien que je ne puisse pas imaginer que quelqu'un ait une raison pratique de le faire, vous pouvez utiliser cette construction:

import sys

try:
    sys.exit() # this always raises SystemExit
except SystemExit:
    print("sys.exit() worked as expected")
except:
    print("Something went horribly wrong") # some other exception got raised
12
répondu tamasgal 2014-09-18 07:23:55

basé sur le wiki python:

Depuis exit () ultimement "only" soulève une exception, elle ne sort du processus que lorsqu'elle est appelée à partir du thread principal, et l'exception n'est pas interceptée.

Et:

exit fonction n'est pas appelée lorsque le programme est tué par un signal, quand un Python fatale erreur interne est détecté, ou si os._exit() est appelée.

Donc, Si vous utilisez sys.exit() dans un try bloc python après avoir soulevé le SystemExit exception python refuse de compléter le et exécute le exception bloc.

maintenant, du point de vue de la programmation, vous n'avez pas besoin de mettre quelque chose qui, vous le savez, soulève définitivement une exception dans un try bloc. Au lieu de cela, vous pouvez soit soulever un SystemExit exception manuelle ou comme une approche plus pythonique si vous ne voulez pas perdre les fonctionnalités de sys.exit() comme passer un argument optionnel à son constructeur, vous pouvez appeler sys.exit() dans un finally,else ou encore except bloc.

Méthode 1 (non recommandée)

try:
    # do stuff
except some_particular_exception:
    # handle this exception and then if you want 
    # do raise SystemExit
else:
    # do stuff and/or do raise SystemExit
finally:
    # do stuff and/or do raise SystemExit

Méthode 2 (Recommandée):

try:
    # do stuff
except some_particular_exception:
    # handle this exception and then if you want 
    # do sys.exit(stat_code)
else:
    # do stuff and/or do sys.exit(stat_code)
finally:
    # do stuff and/or do sys.exit(stat_code)
4
répondu Kasrâmvd 2018-04-17 19:23:26