Pythonで「ValueError: bad marshal data」エラーが出たときは

投稿者: | 2022年11月29日

Raspberry PiにI2C接続した環境センサの計測値を読み取り、ThingSpeakへ定期送信する Python スクリプトの実行時に、「 ValueError: bad marshal data 」エラーが出るようになったので、その対処法を調べて実行してみます。

BME280環境センサ定期送信スクリプト

初代Raspberry PiにI2C接続した2つの環境センサ(BME280とBH1750)の計測値を、定期的にThingSpeakへ送る仕組みを構築して、仕事場の環境監視に勤しんでいたある日、データが数時間更新されていないことに気づきました。

図1.Raspberry Pi冗長化環境センサシステム

図1.Raspberry Pi冗長化環境センサシステム

このRaspberry PiはRTL-SDRレシーバを繋いで、FlightAwareへ観測データ提供を行っているのですが、

そのオンラインステータスを見ると、途切れることなく正常にデータを提供し続けていたことから、システムクラッシュではなさそう。sshで中に入って状況を確認してみることにします。

 

ValueError: bad marshal data

当時、組み上げたPythonスクリプトは、cronへ次のように登録して定期実行しているので、

直近の実行結果を収めた /tmp/ssr_upload を確認すると、そこには見慣れぬエラーメッセージが記されていました。

図2.bad marshal data エラー

図2.bad marshal data エラー



 

pycキャッシュファイルの削除

エラーメッセージ ValueError: bad marshal data で調べてみると、Pythonファイルのキャッシュファイル *.pyc を削除して作り直すように促すと解消されるとのこと。

但し、キャッシュファイルは自身で組んだPythonスクリプトのみならず、システム広範に渡るので、エラーの挙がっている範囲( /home/pi/.local )に狙いを定めて削除します。

 

数分後、定期実行されたPythonスクリプトの結果を再び確認してみると、計測値の取得からThingSpeakへのデータ送信まで、正常に実行されたことを確認できました。

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA