2017-10-21 269 views
0

我从另一个程序(Stata)调用Python脚本,该程序有调用操作系统(shell/winexec)的命令。这反过来会打开一个系统窗口,您可以在其中看到正在运行的Python脚本。有时脚本运行得很好,有时会在完成前突然退出。我不知道为什么。当我在IDLE中运行脚本时,我从来没有遇到这个问题。我使用Windows和Python 3.4。Python脚本在通过窗口运行时突然退出

我试着通过记录Python脚本来捕获错误,但没有错误在那里记录。一切似乎正常工作,直到程序刚刚退出(并不总是在同一点)。另外,我打电话给7个脚本,其中只有两个有这个突然退出问题(再次,他们总是通过IDLE运行良好)。我尝试改变我调用脚本的顺序,并使用shell而不是winexec,反之亦然。在这一点上,我甚至不知道该怎么尝试。它是操作系统吗?蟒蛇?塔塔?任何想法,将不胜感激!

+1

由于异常,Python程序是否正在退出?顺便说一句,_what_ Python程序? –

+0

不,我没有在日志文件中看到任何异常。不确定你的意思是“什么Python程序”;如果是关于剧本的内容,那就是在搞点东西。再说一遍,当我使用IDLE时运行得很好。 – RandomCat

+0

在Python脚本中的大部分逻辑中放置一个'try/except',用于捕获执行过程中可能引发的_any_异常(并在退出前打印出有意义的错误消息)。 – martineau

回答

0

如果没有Martineau的话,不可能想到这件事!发布答案,以防任何人有类似的(看似)神秘错误。

首先,我记录的错误,如马蒂诺建议:

import logging 

logging.basicConfig(filename='C:/MyLog.log',level=logging.DEBUG) 

try: 
    [all my code] 

except Exception as e: 
    logging.info(e) 

此记录的错误:“字符映射在448位置”编解码器不能编码字符‘\ u2013’:字符映射为未定义”。由于某些原因超出了我的薪酬等级,IDLE和python.exe(在Python 3.4中)不以相同的方式处理编码。这是造成这个问题的原因(并且只有当特殊字符出现时,这就是为什么它每次都没有崩溃)。

我寻找解决方案的编码问题,并发现它here。基本上,我从Python 3.4升级到Python 3.6,编码问题消失了。