Остановить python от закрытия по ошибке
в python при запуске скриптов есть ли способ остановить закрытие окна консоли после выплевывания обратной трассировки?
8 ответов
Если вы делаете это на ОС 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, которые часто не распространяют ошибки.
у вас может быть второй скрипт, который импортирует/запускает ваш основной код. Этот скрипт поймает все исключения и распечатает трассировку (затем дождитесь ввода пользователя перед завершением)
предполагая, что ваш код структурирован с помощью if __name__ == "__main__": main()
идиома..
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()
функция, вы использовали бы положить оператор импорта в try:
блок:
try:
import myscriptname
except [...]
лучшим решением, не требующим дополнительных сценариев-оболочек, является запуск скрипта либо из 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, открыть скрипт и нажать кнопку run (F5
или Ctrl+F5
я думаю). При выходе скрипта окно не закроется автоматически, поэтому вы можете увидеть любые ошибки
также, как Крис Торнхилл предложил, в Windows, вы можете создать ярлык для вашего скрипта, и в его свойствах префикс цели с..
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-страницы:
-Я
когда скрипт передается в качестве первого аргумента или используется параметр-c, после выполнения скрипта или команды войдите в интерактивный режим. Он не читает файл $PYTHONSTARTUP. Это может быть полезно для проверки глобальных переменных или в стеке трассировка, когда сценарий вызывает исключение.
в windows вместо двойного щелчка по файлу py вы можете перетащить его в уже открытое окно CMD, а затем нажать enter. Он остается открытым после исключения.
Дэн
ваш вопрос не очень ясен, но я предполагаю, что интерпретатор python выходит (и, следовательно, окно вызывающей консоли закрывается), когда происходит исключение.
вам нужно изменить приложение python, чтобы поймать исключение и распечатать его, не выходя из интерпретатора. Один из способов сделать это-напечатать "нажмите ENTER для выхода", а затем прочитать некоторые входные данные из окна консоли, фактически ожидая, пока пользователь нажмет Enter.