为啥 atexit 不在 python 中注册?
Posted
技术标签:
【中文标题】为啥 atexit 不在 python 中注册?【英文标题】:Why isn't atexit registering in python?为什么 atexit 不在 python 中注册? 【发布时间】:2013-03-10 18:11:55 【问题描述】:我在 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)
atexit 失败。但是当我尝试打印寄存器时它没有问题。当我将 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)
【问题讨论】:
为我工作...您尚未在示例中导入atexit
...
【参考方案1】:
好吧,问题是我需要atexit.register(save_f)
而不是atexit.register(save_f())
。
你不应该进行函数调用!
【讨论】:
【参考方案2】:查看您的代码,我建议您尝试一下:
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
方法。
【讨论】:
注册是一个列表。有问题吗? @madprogramer:只要你能pickle注册就可以了。但是,如果列表中的某些内容不是泡菜安全的,那么它就不起作用了。 现在我可以通过在解释器中输入 save_f 来保存。但它不会自动工作。这是我的基本列表:register = [[theme,'theme']]theme
的值是多少?也许你不能腌制它?
如果你只是在脚本底部(就在退出之前)添加一个“save_f()”,你会得到什么结果?【参考方案3】:
只要我import atexit
并将register
设置为某些东西,您的基本脚本就可以使用。例如:
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
的文件...
【讨论】:
这只是部分代码。其他地方引用了寄存器。 @madprogramer -- 你说“atexit 不能注册它”。你是什么意思?它会引发异常吗? 它什么也没做。也不例外。 @madprogramer -- 你的脚本是如何退出的?如果你使用os._exit
,那么atexit
注册的任何函数都不会运行...
我只用了atexit,还有什么原因?以上是关于为啥 atexit 不在 python 中注册?的主要内容,如果未能解决你的问题,请参考以下文章