为什么不是';在python中注册atexit?
我在Tkinter中有一个循环:为什么不是';在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
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,还有什么原因?