この問題を自分のコンピューターで再現することはできないため、具体的なアドバイスはできませんが、この種のデバッグ方法に関する一般的な解説を以下に示します。
Python からの IOError または OSError 例外に「無効な引数」が表示された場合、それはインタープリターがシステム コールを作成しようとしたことを意味し、失敗errno
して codeに設定されましたEINVAL
。(接線的に言えば、Python は実際には errno コードの数値を出力すべきではありません。記号名は標準化されていますが、数値は標準化されていません。) 最初に行う必要があるのは、それがどのシステム コールであったかを調べることです。strace
次のように、ユーティリティの下でプログラムを実行します。
$ strace -f -o strace.log python yourscript.py [arguments...]
失敗するのを待ってから、ファイルstrace.log
で「-1 E」(まさにその文字列) を検索します。次のようなものが見つかります。
times({tms_utime=162, tms_stime=123, tms_cutime=0, tms_cstime=0}) = 1718279979
write(1, "2.85\n", 5) = -1 EINVAL (Invalid argument)
次に、失敗したシステム コール (この場合は " ") のマニュアル ページを読み、man 2 write
errno コード名 (この場合は) を探して、EINVAL
何が間違っているかを確認します。
この場合、Python インタープリターまたはオペレーティング システムのいずれかにバグを発見したのではないかと強く思います。「無効な引数」とは、システム コールへの入力引数の 1 つに無効な値があったことを意味します。スクリプトでトリッキーなことは何もしていないので、インタープリターがシステム コールを台無しにしているか、カーネルがインタープリターが望んでいることを誤解しています。