我有一个工作正常的程序,然后我添加了此代码用于测试目的:
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.
任何人都可以理解这个错误吗?
答案 0 :(得分: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
类令人困惑。
{{1}}
或者从vanilla shell运行程序,而不是通过IPython运行。