2013-12-06 3 views
0

У меня есть программа, которая работает нормально, то я добавил этот код для тестирования:Python «Ошибка в atexit._run_exitfuncs», когда обезьяна латание datetime.datetime

class datetimeMock(datetime.datetime): 
    def utcnow(): 
     return datetime.datetime (2013, 12, 17, 12) 

if __name__=="__main__": 

    #testing: 
    datetime.datetime = datetimeMock   

    # start processing ... 

Теперь программа, кажется, работает хорошо, но я получаю эту ошибку при выходе:

Error in atexit._run_exitfuncs:                
Traceback (most recent call last):               
    File "C:\Python33\lib\site-packages\IPython\core\history.py", line 508, in end_session  
    len(self.input_hist_parsed)-1, self.session_number))          
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.    

Может кто-нибудь понять эту ошибку?

ответ

1

Замена встроенного типа просит у вас проблем ;-) Попробуйте восстановить datetime.datetime до его первоначального значения до выхода вашей программы. atexit запускается, когда программа выключается (см. Документы - это стандартный модуль Python). Предположительно IPython использует sqlite3, когда программа заканчивается, чтобы сохранить некоторую историю, а ваш фиктивный класс datetime.datetime сбивает с толку.

orig_datetime = datetime.datetime # new 
datetime.datetime = datetimeMock # the same 

try: 
    # start processing 
    ... 
finally: 
    datetime.datetime = orig_datetime 

Или запустите свою программу из оболочки ванили, а не через IPython.