En python lors de l'exécution de scripts est-il un moyen d'arrêter la fermeture de la fenêtre de la console après avoir craché la traceback?Arrêter Python de fermer sur erreur
Répondre
Si vous faites cela sur un système d'exploitation Windows, vous pouvez préfixer la cible de votre raccourci avec:
C:\WINDOWS\system32\cmd.exe /K <command>
Cela permettra d'éviter la fenêtre de fermeture lorsque la commande se termine.
Votre question n'est pas très claire, mais je suppose que l'interpréteur python se ferme (et donc la fenêtre de la console d'appel se ferme) lorsqu'une exception se produit.
Vous devez modifier votre application python pour intercepter l'exception et l'imprimer sans quitter l'interpréteur. Une façon de le faire est d'imprimer "appuyez sur ENTRÉE pour quitter" puis lire une entrée de la fenêtre de la console, en attendant que l'utilisateur appuie sur Entrée.
try:
#do some stuff
1/0 #stuff that generated the exception
except Exception as ex:
print ex
raw_input()
Vous pouvez utiliser 'traceback.print_exc()' au lieu de 'imprimer ex' pour le stacktrace plus bavard –
Vous pourriez avoir un deuxième script, qui importe/exécute votre code principal. Ce script attraper toutes les exceptions, et imprimer un retraçage (puis attendre l'entrée d'utilisateur avant de se terminer)
En supposant que votre code est structuré en utilisant l'idiome if __name__ == "__main__": main()
..
def myfunction():
pass
class Myclass():
pass
def main():
c = Myclass()
myfunction(c)
if __name__ == "__main__":
main()
..et le fichier est nommé " myscriptname.py »(évidemment qui peut être changé), ce qui suit travaillera
from myscriptname import main as myscript_main
try:
myscript_main()
except Exception, errormsg:
print "Script errored!"
print "Error message: %s" % errormsg
print "Traceback:"
import traceback
traceback.print_exc()
print "Press return to exit.."
raw_input()
(Notez que raw_input()
a été remplacé par input()
dans Python 3)
Si vous ne disposez pas d'une fonction main()
, vous utiliseriez mettre la déclaration d'importation dans le bloc try:
:
try:
import myscriptname
except [...]
Une meilleure solution, qui ne nécessite pas de wrapper scripts supplémentaires, est d'exécuter le script à partir de IDLE ou de la ligne de commande.
Sous Windows, sélectionnez Démarrer> Exécuter, entrez cmd
et entrez. Entrez ensuite quelque chose comme ..
cd "\Path\To Your\ Script\"
\Python\bin\python.exe myscriptname.py
(Si vous avez installé Python dans C:\Python\
)
Sous Linux/Mac OS X, il est un peu plus facile, il suffit de lancer cd /home/your/script/
puis python myscriptname.py
La façon la plus simple serait être d'utiliser IDLE, lancer IDLE, ouvrez le script et cliquez sur le bouton d'exécution (F5
ou Ctrl+F5
je pense). Lorsque le script se termine, la fenêtre ne se ferme pas automatiquement, donc vous pouvez voir toutes les erreurs
Aussi, comme Chris Thornhill suggéré, sur Windows, vous pouvez créer un raccourci vers votre script, et dans ses propriétés préfixer la cible avec ..
C:\WINDOWS\system32\cmd.exe /K [existing command]
De http://www.computerhope.com/cmd.htm:
/K command - Executes the specified command and continues running.
Sur les systèmes UNIX (Windows a déjà été couvert ci-dessus ...), vous pouvez changer l'argument interprète pour inclure le drapeau -i:
#/usr/bin/python -i
De la page de manuel:
-i
Lorsqu'un script est passé comme premier argument ou l'option -c est utilisée, passer en mode interactif après l'exécution du script ou la commande. Il ne lit pas le fichier $ PYTHONSTARTUP. Cela peut être utile pour inspecter des variables globales ou une trace de pile lorsqu'un script déclenche une exception.
Vous pouvez enregistrer un gestionnaire d'exceptions de haut niveau qui maintient l'application en vie lorsqu'une exception non gérée se produit:
def show_exception_and_exit(exc_type, exc_value, tb):
import traceback
traceback.print_exception(exc_type, exc_value, tb)
raw_input("Press key to exit.")
sys.exit(-1)
import sys
sys.excepthook = show_exception_and_exit
Ceci est particulièrement utile si vous avez des exceptions survenant à l'intérieur des gestionnaires d'événements qui sont appelés à partir de C code, qui souvent ne propage pas les erreurs.
+1, cela fonctionne même si l'exception est lors des importations, sans avoir à re-indenter l'ensemble du fichier pour essayer. Cela fonctionne également lorsque * not * s'exécute à partir d'un fichier batch, par exemple avec ShellExecuteEx. –
c'est super merci. –
mais quels sont les arguments 'exc_type, exc_value, tb'? (J'utilise python 3.6) –
Dans Windows au lieu de double-cliquer sur le fichier py, vous pouvez le faire glisser dans une fenêtre CMD déjà ouverte, puis appuyez sur Entrée. Il reste ouvert après une exception.
Dan
si vous utilisez Windows, vous pouvez le faire
import os
#code here
os.system('pause')
- 1. dois-je fermer() un son ou arrêter() le canal? (AS3)
- 2. Fermer Python lorsque Parent est fermé
- 3. Erreur d'attribut: Sur le script selenium-python
- 4. Erreur Python
- 5. Envoyer sur le plateau Fermer
- 6. Pour fermer ou ne pas fermer: une application de dialogue lorsque vous appuyez sur "Echap"
- 7. Arrêter l'objet python hors de portée en C++
- 8. erreur de sortie Python multitraitement
- 9. valeur Python erreur déballage
- 10. Attribut erreur en Python
- 11. Django/Python UserWarning Erreur
- 12. ERREUR: requête introuvable dans TrackedRequests. Nous pouvons créer et fermer des sites Web sur différents threads
- 13. Comment arrêter cherrypy de l'intérieur?
- 14. Code Session_End sur le navigateur fermer
- 15. erreur de syntaxe sur la ligne `If`
- 16. Silverlight DataGrid Control - Comment arrêter le tri sur une colonne?
- 17. python, dictionnaire et erreur int
- 18. Python: copy.deepcopy génère une erreur
- 19. erreur de discussion en Python et PyQt
- 20. Python Socket aide (erreur de syntaxe)
- 21. Python MySQL Déclaration retour erreur
- 22. Django et python-twitter erreur
- 23. fermer message de mise à niveau htmlpurifier
- 24. Fermer Simplemodal
- 25. Python installé sur python portable
- 26. Erreur de syntaxe gnuplot lors de l'utilisation de python
- 27. Comment arrêter une opération de lecture sur une socket?
- 28. Mysql InnoDB "erreur 32" sur Windows
- 29. TabView et problème de bouton Fermer
- 30. Erreur avec time.strptime() et python-twitter
Pour ceux en utilisant un fichier batch: Mon fichier batch contenait auparavant la ligne 'python -m Projects' pour démarrer Python et importer automatiquement mon module Projects. Changé ceci à 'cmd/K python -m Projects' et cela a fonctionné comme annoncé, avec la console cmd restant ouverte après une erreur. –