0

つなぎ合わせようとしているスクリプトがあります。多くの番号のシャッフルなどを行い、ローカル マシンのリソース使用率を記録します。私はスクリプトの一部にハングアップしています。文字列の一部から int を作成しようとしています。これがスクリプトの問題部分です...

j = item[11:len(item)]
if j.endswith("L"):
    j = int(j[0:len(j)-1])
print type(j)

item は、長い一連の文字列のスライス/分割から得られる文字列です。この場合、item は「bytes_recv=3829381938203L」または「bytes_recv=1302」のようなものになります。これらの 4 行は、非 10 進文字をトリミングし、末尾の L がある場合は削除し、変数 J の型を出力します。これは、コードの 3 行目に設定されているため、頭の中で整数である必要があります。 int() を使用した int。スクリプトを実行すると、j 変数の型が「str」であることが必ずわかります。これにより、スクリプトが次のコード行に到達すると、スクリプトがスローされます。

sndf = int(((float(int(j) - ndic[nds][len(ndic[nds])-1])/1024)/1024))

ndic ディクショナリには、後でグラフ化に使用するためのリソース監視からのデータ ポイントの実行中のリストが含まれています。このコード行は、ディクショナリ キーのリストから最後のエントリを取得し、それを j 値から引き、その合計を 1024 で 2 回割ります。上記のコード行がエラーの原因であるとは考えていませんが、含まれている可能性があります。スクリプトを実行したときに表示されるエラーは次のとおりです。

TypeError: unsupported operand type(s) for -: 'int' and 'str'

sndf = のコード行でそのエラーを受け取ります。

4

2 に答える 2

3

Python は魔法のように型を変換しません。ndic[nds][len(ndic[nds])-1]も文字列です。

于 2013-06-27T15:19:04.000 に答える
2

問題はおそらく、 if が で終わらない場合に変換jしないことです。int"L"

でスクリプトを実行するとitem = 'bytes_recv=3829381938203L'、正常に動作しますjが、intではitem = 'bytes_recv=1302'if ブロック内のコードが実行されないため、変換は行われません。

long()の代わりにを使用するとint()、実際には をそのままにしておくことができ、次のステートメント"L"も必要ありません。if

j = long(j[0:len(j)])
于 2013-06-27T15:22:24.200 に答える