Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不是';在python中注册atexit?_Python_Loops_Save_Pickle_Atexit - Fatal编程技术网

为什么不是';在python中注册atexit?

为什么不是';在python中注册atexit?,python,loops,save,pickle,atexit,Python,Loops,Save,Pickle,Atexit,我在Tkinter中有一个循环: def main(): #Global Variables windows = [] buttons = [] labels = [] messageboxes = [] global theme theme = 0 listboxes = [] global register register = [] global path path = "" # Lot

我在Tkinter中有一个循环:

def main():
    #Global Variables
    windows = []
    buttons = []
    labels = []
    messageboxes = []
    global theme
    theme = 0
    listboxes = []
    global register
    register = []
    global path
    path = ""
    # Lotsa' Code
    Tkinter.mainloop()

if __name__ == "__main__":
    main()

def save_f():
    global register
    outFile = open('FobbySave.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()
global register     
#At Quit
atexit.register(save_f)
脱欧失败了。但当我尝试打印寄存器时,它没有问题。当我将save_f放入Tkinter循环时,它起作用了,但atexit没有。有人能告诉我我做错了什么吗

附言

对不起,第一次忘了写atexit。但这在我的密码里。 编辑:下面是原始代码

import pickle
import atexit
def save_f():
    global register
    outFile = open('Something.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()
atexit.register(save_f)

如果我
importatexit
并将
register
设置为某个值,那么您的基本脚本对我来说很有用。e、 g:

import pickle
import atexit

def save_f():
    outFile = open('Something.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()

register = 1
atexit.register(save_f)

(请注意,
global
也不是必需的)。在这种情况下,如果我导入atexit并将
寄存器设置为某个值,您应该确保当前目录或
PYTHONPATH上没有另一个名为
atexit.py
的文件。

您的基本脚本对我有效。e、 g:

import pickle
import atexit

def save_f():
    outFile = open('Something.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()

register = 1
atexit.register(save_f)

(请注意,
global
也不是必需的)。在这种情况下,您应该确保当前目录中或您的
PYTHONPATH上的其他地方没有另一个名为
atexit.py
的文件。查看您的代码,我建议您尝试以下操作:

def main():
    # ... everything in main ...
    Tkinter.mainloop()

def save_f():
    outFile = open('FobbySave.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()

#At Quit
atexit.register(save_f)

if __name__ == "__main__":
    main()

问题可能是在运行main方法之后初始化了
atexit
。因此,在代码被终止(并停止执行)后,您尝试添加
atexit
方法。

查看您的代码,我建议您尝试以下方法:

def main():
    # ... everything in main ...
    Tkinter.mainloop()

def save_f():
    outFile = open('FobbySave.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()

#At Quit
atexit.register(save_f)

if __name__ == "__main__":
    main()

问题可能是在运行main方法之后初始化了
atexit
。因此,在代码被终止(并停止执行)后,您尝试添加
atexit
方法。

确定后,问题是我需要
atexit.register(save_f)
而不是
atexit.register(save_f())


你不应该进行函数调用

OK原来问题是我需要
atexit.register(save\u f)
而不是
atexit.register(save\u f())


你不应该进行函数调用

为我工作。。。在您的示例中,您没有导入
atexit
…对我有用。。。在您的示例中,您没有导入
atexit
。register是一个列表。这是个问题吗?@madprogramer:只要你能注册就行了。但是如果列表中有不适合pickle的东西,那么它就不会工作。现在我可以通过在解释器中键入save\u f来保存。但它不是自动工作的。这是我的基本列表:register=[[theme,'theme']]主题的值是多少?也许您不能对此进行pickle?如果您只是在脚本底部(在退出之前)添加一个“save_f()”,您会得到什么结果?register是一个列表。这是个问题吗?@madprogramer:只要你能注册就行了。但是如果列表中有不适合pickle的东西,那么它就不会工作。现在我可以通过在解释器中键入save\u f来保存。但它不是自动工作的。这是我的基本列表:register=[[theme,'theme']]主题的值是多少?也许您不能对此进行pickle?如果您只是在脚本底部(在退出之前)添加一个“save_f()”,您会得到什么结果?这只是代码的一部分。寄存器在别处引用。@madprogramer--您说“atexit不能注册它”。你这是什么意思?它会引发异常吗?它什么都不做。甚至都不例外。@madprogramer——您的脚本是如何退出的?如果您使用
os.\u exit
,则由
atexit
注册的任何函数都不会运行…我只使用atexit,还有什么原因?这只是代码的一部分。寄存器在别处引用。@madprogramer--您说“atexit不能注册它”。你这是什么意思?它会引发异常吗?它什么都不做。甚至都不例外。@madprogramer——您的脚本是如何退出的?如果您使用
os.\u exit
,则由
atexit
注册的任何函数都不会运行…我只使用atexit,还有什么原因?