从Python 2.7到3.3后,代码不再有效

时间:2012-12-13 16:59:37

标签: python

我开始使用Python 3.3而不是2.7而且我用来重启或关闭程序的一些代码行存在问题。

def restart_program(): 
    python = sys.executable
    os.execl(python, python, * sys.argv)

if __name__ == "__main__":
    answer = input("Restart or close program    ")
    if answer.strip() in "Restart restart".split():
        restart_program()

当我使用它时,我收到以下错误:

Fatal Python error: PyEval_RestoreThread: NULL tstate
Current thread 0x00002030:
File "C:\Python33\lib\os.py", line 531 in execl
File "C:\Users\user\desktop\filename", line 66 in restart_program

第66行

os.execl(python, python, * sys.argv)

我不知道如何解决这个问题,我真的希望有人有解决方案。

如果我像下面的代码那样写一些非常简单的东西,那么它没有任何问题。

import math
import os
import sys

a = input ("enter a")
a = float (a)
b = 12

x = a+b
print (x)

def restart_program(): 
    python = sys.executable
    os.execl(python, python, * sys.argv)

if __name__ == "__main__":
    answer = input("Restart or close the program    ")
    if answer.strip() in ["Restart", "restart"]:
        restart_program()

我想我也可以在这里添加我的全部代码。

http://pastebin.com/fM8s0iiw

1 个答案:

答案 0 :(得分:1)

尝试评论Popen电话,看看是否有事情要清理。这真的不是一个打开文件的好方法,因为它只适用于Windows,并且只有你有png文件的文件关联集。

我敢打赌,Python 3在离开孤立的流处理程序或其他东西时不太容忍2,所以吹走父进程会导致孩子窒息。如果评论Popen可以解决您的问题,请尝试跟踪您创建的所有子项,并在execl调用之前明确删除它们。