1

無効な引数エラーとは何か、およびその原因についての適切な説明を見つけるのに、あまり運がありませんでした。

私が取り組んでいる現在のサンプルは

import sys
mylog="mylog.log"
sys.stdout = open(mylog,'w')
#lots of code
#.
#.
#.
#End of lots of code
from time import clock
print "blablabla",clock()

クロック ラインで IOError Invalid Argument エラーが発生しました。私も試してみました

print "blablabla\t%s"%clock()

このエラーに関する情報は非常に役立ちます。これらの行は、短い実行では完全に正常に機能しますが、コードをしばらく実行した直後に壊れます。バッファー サイズを 45 ~ 100 行のように低く設定しようとしました。

4

1 に答える 1

3

この問題を自分のコンピューターで再現することはできないため、具体的なアドバイスはできませんが、この種のデバッグ方法に関する一般的な解説を以下に示します。

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 writeerrno コード名 (この場合は) を探して、EINVAL何が間違っているかを確認します。

この場合、Python インタープリターまたはオペレーティング システムのいずれかにバグを発見したのではないかと強く思います。「無効な引数」とは、システム コールへの入力引数の 1 つに無効な値があったことを意味します。スクリプトでトリッキーなことは何もしていないので、インタープリターがシステム コールを台無しにしているか、カーネルがインタープリターが望んでいることを誤解しています。

于 2010-07-13T18:08:42.287 に答える