プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2024/08/30

[PySide] Windows で実行するとオーバーフローエラーが発生

event_note2024/08/30 0:21

PySide6 で作成したアプリを Pyinstaller で exe 化して実行すると、オーバーフローのエラーが発生しました。

エラーの内容は以下です。

OverflowError: Python int too large to convert to C long

該当箇所のコードは、以下のように QLineChart を使ってグラフを作成している箇所でした。

series = QLineSeries()

# 省略...

qdt = QDateTime()
qdt.setSecsSinceEpoch(int(dt.timestamp()))

series.append(qdt.toMSecsSinceEpoch(), count)

toMSecsSinceEpoch() はエポックタイムをミリ秒で返す関数です。
これを append 関数に渡すと、32bit の範囲を超えているとしてエラーが発生していました。

ビルド環境も実行環境も 64bit なのに、何故 32bit の long int として扱われているのか?
調べてみたところ、以下の記事に辿り着きました。

どうやら float でキャストすれば良さそうということで、以下のように修正したところ、正常に動作するようになりました。

series.append(float(qdt.toMSecsSinceEpoch()), count)