Ответ 1
Если вы делаете это в ОС Windows, вы можете префикс цели своей ярлыка:
C:\WINDOWS\system32\cmd.exe /K <command>
Это предотвратит закрытие окна при выходе команды.
В python при запуске скриптов есть способ остановить закрытие окна консоли после извлечения трассировки?
Если вы делаете это в ОС Windows, вы можете префикс цели своей ярлыка:
C:\WINDOWS\system32\cmd.exe /K <command>
Это предотвратит закрытие окна при выходе команды.
try:
#do some stuff
1/0 #stuff that generated the exception
except Exception as ex:
print ex
raw_input()
Вы можете зарегистрировать обработчик исключений верхнего уровня, который поддерживает приложение при возникновении необработанного исключения:
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
Это особенно полезно, если у вас есть исключения, происходящие внутри обработчиков событий, вызываемых из кода C, которые часто не распространяют ошибки.
У вас может быть второй script, который импортирует/запускает ваш основной код. Этот script будет использовать все исключения и распечатать трассировку (затем дождаться ввода пользователя до окончания)
Предполагая, что ваш код структурирован с помощью if __name__ == "__main__": main()
idiom..
def myfunction():
pass
class Myclass():
pass
def main():
c = Myclass()
myfunction(c)
if __name__ == "__main__":
main()
.. и файл называется "myscriptname.py" (очевидно, что его можно изменить), будет работать
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()
(Обратите внимание, что raw_input()
был заменен на input()
в Python 3)
Если у вас нет функции main()
, вы должны использовать оператор import в блоке try:
:
try:
import myscriptname
except [...]
Лучшее решение, которое не требует дополнительных сценариев-оболочек, заключается в том, чтобы запустить script либо из IDLE, либо из командной строки.
В Windows откройте "Пуск" > "Выполнить", введите cmd
и введите. Затем введите что-то вроде..
cd "\Path\To Your\ Script\"
\Python\bin\python.exe myscriptname.py
(Если вы установили Python в C:\Python\
)
В Linux/Mac OS X это немного проще, вы просто запустите cd /home/your/script/
, затем python myscriptname.py
Самый простой способ - использовать IDLE, запустить IDLE, открыть script и нажать кнопку запуска (F5
или Ctrl+F5
, я думаю). Когда script завершается, окно не будет закрываться автоматически, поэтому вы можете увидеть любые ошибки
Кроме того, как предложил Крис Торнхилл, в Windows вы можете создать ярлык для своего script, а в нем Properties префикс цели с помощью
C:\WINDOWS\system32\cmd.exe /K [existing command]
Из http://www.computerhope.com/cmd.htm:
/K command - Executes the specified command and continues running.
В системах UNIX (Windows уже была рассмотрена выше...) вы можете изменить аргумент интерпретатора, чтобы включить флаг -i:
#!/usr/bin/python -i
На странице man:
-i
Когда в качестве первого аргумента передается script или используется опция -c, введите интерактивный режим после выполнения команды script или команды. Он не читает файл $PYTHONSTARTUP. Это может быть полезно для проверки глобальных переменных или трассировки стека, когда script вызывает исключение.
В окнах вместо двойного щелчка на файле py вы можете перетащить его в уже открытое окно CMD, а затем нажать enter. Он остается открытым после исключения.
Dan
Ваш вопрос не очень ясен, но я предполагаю, что интерпретатор python завершает работу (и, следовательно, окно вызывающей консоли закрывается), когда происходит исключение.
Вам нужно изменить приложение python, чтобы поймать исключение и распечатать его, не выходя из интерпретатора. Один из способов сделать это - напечатать "нажмите ENTER для выхода", а затем прочитайте некоторый ввод из окна консоли, фактически ожидая, что пользователь нажмет Enter.
Если вы используете окна, вы можете сделать это
import os
#code here
os.system('pause')