阻止Windows关闭Python

时间:2014-03-16 12:31:32

标签: python python-3.x

这个问题可能已被问过几次,但我似乎无法找到它。

基本上我只是学习Python而且我在Windows上,这意味着我双击.py文件并打开它。这很有效,直到出现错误,此时Python调用exit并关闭窗口。

当然,解决这个问题的一种方法是在Windows中使用cmd程序并从那里运行Python程序,但是,有没有办法解决它,以便我的应用程序不会如果我从Windows资源管理器中打开它,它会在遇到错误时立即关闭并关闭?

while(True):
    try:
        number = input('Enter a number: ')

        if(is_int(number) is False):
            print('Please actually enter a number')
        if(number > 0):
            answer = input('Oh Noes you really want that?')
            if(answer == 'yes'):
                sys.exit(0);
    except KeyboardInterrupt:
        sys.exit(0)
    except Exception as e:

        input('')

5 个答案:

答案 0 :(得分:2)

为了保持您的计划完好无损,例如为了不引入不需要的catch-em-all异常处理(又名pokemon处理),至少有三个选项:

  1. 使用任何控制台终端,例如内置cmdpowershell或任何第三方控制台应用程序。
  2. 使用任何IDE:pycharm,IDLE(默认设置为python windows安装程序)或任何能够运行python代码的内容。
  3. 使用文本编辑器插件运行python代码。至少notepad++sublime text能够这样做。
  4. 我建议从启动器的选项1开始,然后慢慢转到小脚本和项目的选项3,以及大版本的选项2。

答案 1 :(得分:1)

我在脚本底部放置了input函数,然后它会挂起,直到您按Enter或关闭命令提示符。如果调用exit函数,则在调用exit函数之前立即调用它。否则将它放在脚本的底部。

另外我假设您已在脚本中定义了is_int?

答案 2 :(得分:1)

您认为它应该做什么?

Python正在绘制你看到的窗口,如果python崩溃,窗户就会消失。

您可以通过cmd或在IDE中运行它。 (就像IDLE一样,虽然涉及到GUI但存在一些问题)

否则,在文件末尾添加类似的内容

try:
     run() 
except Exception as inst:
     print type(inst), inst.args
     #it prints the exception
     print sys.exc_traceback.tb_lineno 
     #if you want the line number where the error occurred in the source code
     raw_input()

inst是异常实例,您可以看到参数的类型和列表。 然后使用sys模块,您还可以看到代码中出现错误的行。

这样,每个错误都将在关闭之前处理和显示

这是正确的方法吗?

没有。您应该使用广告IDE(例如Eclipse与PyDev或PyCharm)。

答案 3 :(得分:0)

@SeçkinSavaşçı在开始时非常有用的评论:

  

最常见的方法是让它等待输入,然后忽略输入并终止脚本。

我花了一秒钟才明白我去了解如何做到这一点,所以首先我看到停止脚本并使用:

while(True):
    try:
        # Application code here
    except:
        input('')

哪种方法可以很好地捕获所有错误,这与PHP不同(不幸的是我已经很熟悉)都是例外。

所以下一部分是告诉我发生了什么错误以及如何解决它,我需要一个回溯。只是碰巧Python文档在这里给出了答案:http://docs.python.org/2/library/traceback.html#traceback-examples在一个容易看到的例子中:

exc_type, exc_value, exc_traceback = sys.exc_info()
print(traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout));

将其添加到input('')上方,我完成了错误处理,向我展示了我需要的一切。

全心全意,

答案 4 :(得分:0)

尝试导入时间和time.sleep()。另外,我建议您使用IDLE或Geany。我一直在使用它们,效果很好。