溢出错误:规范化天数过大,无法适应C整数
我正在使用以下Python代码来计算用户时间和系统时间。
t = os.times()
usersystime = t[0] + t[1]
usersystime = datetime.timedelta(seconds=usersystime)
但是,在一个Amazon EC2的m.4xlarge实例上,我偶尔会遇到以下错误:
OverflowError: normalized days too large to fit in a C int
我已经使用这段Python代码超过一年了,一直没有问题。现在,在这种我之前从未使用过的Amazon EC2实例上,我遇到了这个错误。
我该如何解决这个问题呢?
1 个回答
1
我发现Python的一些内置函数,比如range
和xrange
,不支持更大的整数,这可能是因为它们是用C语言实现的,以提高性能。你可以看看这个问题,里面有个例子。
这可能就是你代码出问题的原因。t[0] + t[1]
的结果能放进一个整数里吗?如果放不下,你就得想办法解决这个问题(比如把t[0] + t[1]
标准化?这要看你想做什么,你的代码片段没有说明这一点)或者自己实现一个timedelta
。
编辑:
我查看了Python的文档,并在我的电脑上(WinXP 32位/Python2.7)运行了你的代码,没发现整数溢出的原因。不过,你提到这个问题是偶尔发生的,所以可能是亚马逊实例的times()返回了一些奇怪的值(虚拟化真是让人哭笑不得;)
首先,试着做一些测试,准确找出t[0]和t[1]的哪些范围会导致这个异常。如果它们确实有一些不常见的高值(可能是因为实例被暂停后又恢复,不知道具体情况),你的代码就得针对这个情况进行测试。