En python cuando se ejecutan scripts, ¿hay alguna manera de evitar que se cierre la ventana de la consola después de escupir el traceback?Detener Python desde el cierre en el error
Respuesta
Si hacer esto en un sistema operativo Windows, puede prefijar el destino de su acceso directo con:
C:\WINDOWS\system32\cmd.exe /K <command>
Esto evitará la ventana de cierre cuando el comando sale.
Su pregunta no es muy clara, pero asumo que el intérprete de python se cierra (y por lo tanto se cierra la ventana de la consola de llamadas) cuando ocurre una excepción.
Necesita modificar su aplicación de Python para atrapar la excepción e imprimirla sin salir del intérprete. Una forma de hacerlo es imprimir "presionar ENTER para salir" y luego leer alguna entrada desde la ventana de la consola, efectivamente esperando que el usuario presione Enter.
try:
#do some stuff
1/0 #stuff that generated the exception
except Exception as ex:
print ex
raw_input()
Es posible que desee usar 'traceback.print_exc()' en lugar de 'ex' de impresión para el StackTrace más prolija –
Puede tener una segunda secuencia de comandos, que importa/ejecuta su código principal. Esta secuencia de comandos sería capturar todas las excepciones, e imprimir un rastreo (luego esperar a la entrada del usuario antes de terminar)
Asumiendo que su código está estructurado utilizando el lenguaje if __name__ == "__main__": main()
..
def myfunction():
pass
class Myclass():
pass
def main():
c = Myclass()
myfunction(c)
if __name__ == "__main__":
main()
..y el archivo se denomina " myscriptname.py"(obviamente, que se pueden cambiar), el siguiente trabajo
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()
(Tenga en cuenta que raw_input()
ha sido sustituido por input()
en Python 3)
Si usted no tiene una función main()
, utilizaría poner la instrucción de importación en el bloque de try:
:
try:
import myscriptname
except [...]
Una solución mejor, uno que no requiere envoltura-scripts adicionales, es para ejecutar el script desde IDLE, o la línea de comando.
En Windows, vaya a Inicio> Ejecutar, ingrese cmd
y escriba. A continuación, introduzca algo así ..
cd "\Path\To Your\ Script\"
\Python\bin\python.exe myscriptname.py
(Si ha instalado Python en C:\Python\
)
En Linux/Mac OS X que es un poco más fácil, que acaba de ejecutar cd /home/your/script/
continuación python myscriptname.py
La manera más fácil sería usar IDLE, ejecutar IDLE, abrir el script y hacer clic en el botón de ejecución (F5
o Ctrl+F5
, creo). Cuando la secuencia de comandos se cierra, la ventana no se cerrará automáticamente, por lo que puede ver cualquier error
Además, como Chris Thornhill sugirió, en Windows, puede crear un acceso directo a su secuencia de comandos, y en sus Propiedades prefija el objetivo con ..
C:\WINDOWS\system32\cmd.exe /K [existing command]
De http://www.computerhope.com/cmd.htm:
/K command - Executes the specified command and continues running.
En los sistemas UNIX (Windows ya ha sido cubierta por encima ...) puede cambiar el argumento intérprete para incluir la bandera -i:
#/usr/bin/python -i
De la página del manual:
-i
Cuando una secuencia de comandos se pasa como primer argumento o se utiliza la opción -c, entrar en modo interactivo después de ejecutar la secuencia de comandos o el comando. No lee el archivo $ PYTHONSTARTUP. Esto puede ser útil para inspeccionar variables globales o un seguimiento de pila cuando un script genera una excepción.
Puede registrar un manejador de excepciones de nivel superior que mantiene la aplicación vivo cuando se produce una excepción no controlada:
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
Esto es especialmente útil si tiene excepciones que ocurren dentro de los controladores de eventos que son llamadas desde C código, que a menudo no propagan los errores.
+1, esto incluso funciona si la excepción es durante las importaciones, sin tener que volver a sangrar todo el archivo para probarlo. También funciona cuando * no * se ejecuta desde un archivo por lotes, por ejemplo, con ShellExecuteEx. –
eso es genial gracias. –
, pero ¿cuáles son esos argumentos 'exc_type, exc_value, tb'? (Estoy usando Python 3.6) –
En Windows, en lugar de hacer doble clic en el archivo py, puede arrastrarlo a una ventana de CMD ya abierta, y luego presionar enter. Se mantiene abierto después de una excepción.
Dan
si está utilizando ventanas se podía hacer esto
import os
#code here
os.system('pause')
- 1. ¿Cómo detener la consola desde el cierre al salir?
- 2. Detener el programa SAS Error
- 3. error de alcance en el cierre recursivo
- 4. Detener Visual Studio desde el programa de cierre después de terminar
- 5. Detener el archivo mp3 desde la transmisión en navegadores
- 6. acceso desde el exterior variable en bucle de cierre Javascript
- 7. Cómo detener el proceso desde el archivo .BAT?
- 8. ¿Cuándo usar el cierre?
- 9. Cómo detener sed desde el almacenamiento en búfer?
- 10. Cómo detener Chrome desde el almacenamiento en caché
- 11. Cómo detener Visual Studio 2010 en el error de compilación
- 12. Detectar el cierre de sesión de Windows en Python
- 13. Detener Python incorporado
- 14. detener el servicio en android
- 15. comportamiento extraño en el cierre pitón
- 16. Cómo detener PHP desde el registro PHP Aviso errores
- 17. AVAudioPlayer detener un sonido y reproducirlo desde el principio
- 18. El cierre de Python no funciona como se esperaba
- 19. CXF WS, Interceptor: detener el procesamiento, responder con un error
- 20. Python: cómo configurar dinámicamente el entorno de cierre de función
- 21. python: ejecute el shell de python interactivo desde el programa
- 22. detener palabras en el sitio
- 23. Detener el hilo en python3
- 24. cerveza instalar MySQL, error al intentar detener el servidor
- 25. El cierre no funciona
- 26. Crear cierre desde genérico en Scala
- 27. Visual Studio - Evitar detener la depuración se cierre Internet Explorer
- 28. ¿Cómo detener el sondeo en SignalR?
- 29. JQuery Clear Form en el cierre
- 30. Desactivar FancyBox 2 desde el cierre al hacer clic en el fondo
Para aquellos utilizando un archivo de proceso por lotes: Mi archivo por lotes anteriormente contenía la línea 'python -m Projects' para iniciar Python e importar automáticamente mi módulo de Proyectos. Cambié esto a 'cmd/K python -m Projects' y funcionó según lo anunciado, con la consola del cmd permaneciendo abierta después de un error. –