Python程序意外终止

时间:2016-08-23 20:54:39

标签: python sockets python-3.x tkinter

我有一个程序可以抓取网站并在找到文件时下载文件。通常它运行得很好,但在其他时候,它会在完成搜索序列之前终止程序的操作。我很难过。它只在搜索时下载时才会退出。我目前正在猜测一个套接字错误问题,但就像我上面说的那样,我很难过。我已经进行了httperror检查,并且没有显示任何http错误代码。我正在尝试插入套接字错误检查,它变得更加疯狂。在为套接字错误检查添加任何内容之前,它工作正常。一旦我添加套接字错误检查程序甚至不会运行。它会调出IDLE显示并显示光标,就像IDLE准备好并等待下一个命令一样。否则,在没有套接字错误检查的情况下,它指示程序正在运行,直到tkinter窗口关闭(错误程序意外终止)。如果tkinter窗口关闭,它不会在IDLE上给出任何错误。

我需要做些什么来找出为什么这个程序有时会提前终止并能够将其捕获,以便它不会终止,只需返回并重新运行相同的网址。我想我已经重新运行相同的网址,但我没有正确的套接字错误处理,如果它甚至套接字错误的麻烦。我很难过。

git status -s

1 个答案:

答案 0 :(得分:1)

我认为问题是由于tkinter没有机会启动它的主要事件循环,这是在你致电root.mainloop()时完成的,我建议您在while中制作目前的代码循环而不是使用root.after()方法定期调用的函数。我已经包含了一个潜在的变化来测试是否可以解决这个问题。

请注意以下几行:

                    Fileupdate = Fileupdate + 1
                    root.update_idletasks()
                    continue

在某些情况下除了分支是多余的,因为如果代码继续进行会发生这种情况,因此修改代码以在函数中工作的一部分就是简单地去除那些部分。以下是我希望您尝试从原始while语句开始运行的代码:

#-while Fileupdate <= Filecount:
def UPDATE_SOCKET():
    global Fileupdate #allow the global variable to be changed
    if Fileupdate <= Filecount:
#/+
        try:
                root.title(Fileupdate)
                url = 'http://www.webpage.com/photos/'+str(Fileupdate)+'.jpg'
                a = urllib.request.urlopen(url)
                urllib.request.urlretrieve(url, str(Fileupdate)+'.jpg')
        except urllib.error.HTTPError as err:
                #<large redundant section removed>
                print("error code",err.code)
        except socket.error as v:
                print("socket error",Fileupdate, v[0])
#-                continue
                root.after(500, UPDATE_SOCKET)
                return
#/+


        Fileupdate = Fileupdate+1
#-        root.update_idletasks()
        root.after(100, UPDATE_SOCKET) #after 100 milliseconds call the function again
        #change 100 to a smaller time to call this more frequently.


root.after(0,UPDATE_SOCKET) #when it has a chance, call the update for first time

root.mainloop() #enter main event loop
#/+

我指示更改的行,其中#-后跟以#/+

结尾的替换块