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