Python“;atexit中出现错误。“运行退出功能”;当修补datetime.datetime时

Python“;atexit中出现错误。“运行退出功能”;当修补datetime.datetime时,python,datetime,runtime-error,monkeypatching,Python,Datetime,Runtime Error,Monkeypatching,我有一个运行良好的程序,然后为了测试目的添加了以下代码: class datetimeMock(datetime.datetime): def utcnow(): return datetime.datetime (2013, 12, 17, 12) if __name__=="__main__": #testing: datetime.datetime = datetimeMock # start processing .

我有一个运行良好的程序,然后为了测试目的添加了以下代码:

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.               

有人能理解这个错误吗?

替换内置类型是自找麻烦;-)在程序退出之前,请尝试将
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
或者从一个普通的shell运行程序,而不是通过IPython