分段故障?没见错我见过......

时间:2014-04-06 23:50:55

标签: python button error-handling tkinter

我有这段代码:

from Tkinter import *
def get_info(key):
    pass#do more later
def create_new():
    create = Toplevel(root)
    create.title('Create A New Contact')
    Label(create, text='Name: ').grid(row=0, sticky=W+E)
    name = Entry(create, width=8).grid(row=1, sticky=W+E)
    Label(create, text='Address(ex. 1111 Main St, MyCity, Anystate 12345): ', wraplength=1).grid(row=2, sticky=W+E)
    address = Entry(create, width=8).grid(row=3, sticky=W+E)
def access():
    access_window = Toplevel(root)
    access_window.title("Access a Contact")
    Label(access_window, text="Enter a first name: ").grid(row=0, sticky=W+E)
    access_key = Entry(access_window, width=8).grid(row=1, sticky=W+E)
    Button(access_window, text="Submit", command=lambda: get_info(access_key.get('0.0', 'end-1c'))).grid(row=2, sticky=W+E)
root = Tk()
root.title('Address Book')
button1 = Button(root, text="Create New", command=create_new)
button1.grid(row=0, column=0)
button2 = Button(root, text="Access Person", command=access)
button2.grid(row=0, column=1)

此行有错误:

button2.grid(row=0, column=1)

它给了我这个错误:

Segmentation fault: 11

为什么会出现这种情况?什么是分段错误?

1 个答案:

答案 0 :(得分:1)

"分段错误"是一个非常低级别的错误:它意味着操作系统捕获您的程序访问未分配给任何实际内存的一系列内存地址。

如果您使用C编程,则表示代码中存在错误。但是你是用Python编程的。对于你在Python中用来触发分段错误的任何事情都应该不可能。该错误实际上不在您的代码中!不管你信不信,这个问题的最可能原因是硬件错误:特别是坏RAM。一遍又一遍地运行程序至少100次;同时,做一些内存密集的事情,比如加载大量图形密集的网页,然后重复关闭它们。它是否每次都崩溃?如果没有,请运行memtest86+让它继续运行直到它告诉您哪个RAM棒坏了,然后更换它。

现在,如果它每次都崩溃,那么您确实遇到了软件问题。下一个最可能的情况是Tkinter加载项与Python解释器,实际的Tk小部件库或两者都不兼容。从已知良好的源代码中卸载并重新安装Tk和Tkinter(例如,如果您运行的是Linux,您的发行版和软件包存储库)。那应该解决它。

Tkinter,Tk,其中一个较低级别的窗口库或Python解释器,很可能,但仍然可能是完全错误。只有重新安装已知良好的软件包才能解决这个问题。