2009-04-22 12 views

Répondre

16

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.

+0

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. –

0

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.

14
try: 
    #do some stuff 
    1/0 #stuff that generated the exception 
except Exception as ex: 
    print ex 
    raw_input() 
+1

Vous pouvez utiliser 'traceback.print_exc()' au lieu de 'imprimer ex' pour le stacktrace plus bavard –

7

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. 
3

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.

11

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.

+0

+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. –

+0

c'est super merci. –

+0

mais quels sont les arguments 'exc_type, exc_value, tb'? (J'utilise python 3.6) –

1

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

0

si vous utilisez Windows, vous pouvez le faire

import os 

    #code here 

    os.system('pause')