Python 3 Timedelta OverflowError

时间:2018-03-13 18:38:04

标签: python django python-3.x datetime overflow

我有一个大型数据库,我正在加载到内存缓存中。我有一个进程,每天都在迭代数据。

最近这个过程开始抛出以下错误:

OverflowError: date value out of range

start_day = start_day - datetime.timedelta(days = 1)

这是在Ubuntu 14.04.5上的Python 3.4.3中运行

3 个答案:

答案 0 :(得分:1)

您已达到datetime.date.min,或第1年1月的第一天:

>>> from datetime import date, timedelta
>>> date.min
datetime.date(1, 1, 1)
>>> date.min - timedelta(days=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: date value out of range

如果您从datetime.date.today()开始,那么您的代码需要超过736k步才能到达目的地:

>>> date.today().toordinal()
736766

您的代码可能在某个地方出现了一个经常减少的错误。

答案 1 :(得分:1)

为了克服错误,你可以改变

datetime.date(1, 1, 1)

更多更大的价值,如

datetime.date(2, 2, 2)

但如果您编辑时间列,例如请注意您在此列中的日期是人为的 2、2、2 或其他内容

答案 2 :(得分:-1)

如果您在使用 Pandas 读取 excel/csv 文件时遇到此问题,请检查您的 excel/csv 文件,任何一列或多列都将具有类似 ############# 的值,即平均值为负数,例如:(-11111) 或日期太长而无法放入单元格

import pandas as pd

df = pd.read_excel(file path,dtype='string') #this will convert all the column 
     type to string

or if you want to convert specific column then 

df = pd.read_excel(file path,converters={'column name':str})