2011-01-11 5 views
3

次のPythonコードを使用してUser + Sys時間を計算しています。OverflowError:正規化された日数が大きすぎてCの整数に収まらない

t = os.times() 
usersystime = t[0] + t[1] 
usersystime = datetime.timedelta(seconds=usersystime) 

しかし、Amazon EC2のインスタンスm.4xlargeに、私は時折、次のエラーが表示されます。私は何の問題もなく一年以上にわたり、このPythonのコードを使用している

OverflowError: normalized days too large to fit in a C int 

。さて、この1つのタイプのAmazon EC2インスタンス(これまで私が使用したことのない)では、このエラーが発生します。

どうすれば解決できますか?

+1

どのバージョンのPythonですか? – milkypostman

+0

'usersystime'が原因かもしれません。この値を計算するコードを与えることができますか? – marcog

+0

意味がありません... 'try:... OverflowError:を除いて、そのコードをラップするのはどうですか?users users、os.times()'を出力しますか? – TryPyPy

答えて

1

私は、彼らが最適化としてCで実装しているためか、などrangexrangeとしてPythonの組み込み関数のいくつかは、大きな整数をサポートしていないことが判明しました。例としてthis questionを見てください。

これは、コードの場合に該当する可能性があります。 t[0] + t[1]は整数に適合しますか?そうでない場合は、回避方法を見つけなければなりません(t[0] + t[1]?あなたがやりたいことに依存し、あなたのスニペットはそれを明確にしません)、または独自のtimedeltaを実装する必要があります。

EDIT:

Pythonのドキュメントを見てみると、私のデスクトップ(WinXPの32ビット/ Python2.7)にあなたのコードを実行しているが、私は、整数オーバーフローのための理由を見ません。しかし、この問題はの場合はとなるため、Amazonインスタンスの回()(yay virtualization;))が返される可能性があります。

まず、例外が発生しt[0]t[1]の正確どの範囲のために決定するためにいくつかのテストをやってみてください。実際に何らかの珍しい値がある場合(インスタンスが一時停止されてから再開されるため、そのような細かいことは分かりません)、それに対するコードテストが行​​われます。

+0

私は、青いところで実行しているLinuxホストで同じ問題を抱えていました – akiva

関連する問題