Атексит не регистрируется в питоне
Оказывается, проблема была другой Теперь у меня есть цикл в 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)
3 ответа
ОК, оказывается, проблема была в том, что мне нужно atexit.register(save_f)
вместо atexit.register(save_f())
,
Вы не должны делать вызов функции!
Вы основной сценарий работает для меня, если я 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
тоже не обязательно). В этих случаях вы должны убедиться, что у вас нет другого файла с именем atexit.py
в текущем каталоге или где-то еще на вашем PYTHONPATH ...
Глядя на ваш код, я бы предложил вместо этого попробовать:
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()
Возможно, проблема в том, что вы инициализируете atexit
после запуска основного метода. Таким образом, после того, как код убит (и прекращает выполнение), вы пытаетесь добавить atexit
метод.