Python IDLE重新启动而没有给我输出

时间:2015-03-23 01:11:27

标签: python windows restart python-idle

我在实施快速排序算法时遇到了问题,就像在这种情况下python interpretor automaticlly restarting without returning answer一样。我找不到比这更类似的问题了。由于这篇文章自2012年以来一直处于非活动状态,问题没有解决,我决定再次提问。这是我的代码:

#coding:utf8

import time
import sys
sys.setrecursionlimit(1000000)
x=eval(input("Type a list: "))
start=time.time()
L=[]
R=[]
L_=[]
R_=[]
c=0
z=x[0]
for j in range(1,len(x)):
    if x[j]>= z:
        R.append(x[j])
    elif x[j] <= z:
        L.append(x[j])
def fun(x,lista,c):
    for i in range(len(x)-1):
        for j in range(i+1,i+2):
            if x[i]<=x[j] and c!=len(x)-2:
                c+=1
            elif x[i]>x[j]:
                lista.append(x[i])
                lista.append(x[j])
                x[i]=lista[1]
                x[j]=lista[0]
                lista=[]
                c=0
                return fun(x,lista,c)
            elif x[i]<=x[j] and c==len(x)-2:
                    c=0
                    return x
fun(L,L_,c)
fun(R,R_,c)

print(L+[z]+R)
end=time.time() 
print(end-start)        

我正在使用的Python版本是3.4。如您所见,我使用sys库来增加递归限制,但它没有解决我的问题。我测试了它,它可以对“X”数量的元素进行排序,其范围为300> X> 250,如果我是对的。我怎么解决这个问题?先感谢您。

2 个答案:

答案 0 :(得分:0)

正常空闲(除非以-n开头)在用户子流程中运行用户代码。 RESTART行意味着子进程已重新启动。无论一个人如何开始空闲(没有-n),无论何时选择Shell - &gt;重启Shell Cntl + F6或Run - &gt;运行模块F5。

如果用户进程从程序错误中崩溃,也会发生RESTART。如果从命令行(python -m idlelib或2.x中的... idlelib.idle开始空闲,则可能会出现错误消息,但这不会发生在您的程序中。

我在用一个具体的作业替换输入行之后用3.4.3运行你的程序(你应该在发布之前完成)

x = list(reversed(range(1000)))

(对于许多排序算法,这种特殊选择是最坏的情况)。

我在命令窗口中没有看到任何内容,但确实看到了python.exe已停止工作的Windows消息。由于Idle仍在运行,这引用了错误过程。

将1000000减少到10000并没有改变任何东西。将递归限制保留为1000会导致长时间追溯。

Traceback (most recent call last):
  File "C:\Programs\python34\tem.py", line 33, in <module>
    fun(L,L_,c)
  File "C:\Programs\python34\tem.py", line 29, in fun
    return fun(x,lista,c)
....
  File "C:\Programs\python34\tem.py", line 29, in fun
    return fun(x,lista,c)
  File "C:\Programs\python34\tem.py", line 18, in fun
    for i in range(len(x)-1):
RuntimeError: maximum recursion depth exceeded in comparison

将列表缩小为100并未改变结果。你有一个无限循环,你需要阻止它。

您的代码看起来不像我熟悉的quicksort版本。也许您应该查看算法的定义。

然而,这一行             对于范围内的j(i + 1,i + 2): 看起来像一个bug,因为它只用j = i+1迭代一次。实际上,如果用该行代替它,程序就会运行相同的程序并且代替以下几行。

在任何情况下,都不符合终止条件x[i]<=x[j] and c==len(x)-2。我建议从一个只有几个项目的简短列表开始,然后从打印语句添加到fun,看看价值如何偏离您的期望。您也可以尝试手动执行算法。

答案 1 :(得分:0)

我正要问同样的问题,因此对于stackoverflow感到不满。

我的Python在长python程序期间重新启动,更具体地说,主要是在调用外部程序的程序期间(例如在调用FFMPEG或使用system.os命令调用Tesseract时)。

我的搜索引发了我关于stackoverflow的4个问题,我学到了以下内容:

Python IDLE在子进程中运行用户代码,如果此子进程崩溃,则会发生RESTART。 (感谢Terry Jan Reedy)。

我认为这是我的问题(子流程崩溃)。

起初,我虽然这是一个硬件问题:我测试了我的CPU,检查了我的硬盘,用Memtest测试了我的RAM ......并没有检测到错误。

然后我在我的第二台计算机上运行我的程序,这与我的第一台计算机完全相同:第二台计算机上的一切正常,但第一台计算机上没有。

之后我运行了SystemFileCheck(我使用的是Windows),看到我的操作系统出现无法解决的问题。

最后我删除了操作系统分区并重新安装了Windows。

现在一切都很好。 - &GT;所以我的Windows无缘无故地杀死了我的python进程。

结论:

  • 如果用户子流程崩溃,则会发生Python中的Buggy RESTART。 这个崩溃可能来自程序中的错误(无限循环,例如完整内存)或来自损坏的操作系统。

修复:检查程序是否存在错误,然后重新安装或重新安装操作系统。