0

別のマシンからテキストファイルで送信されたデータを取得しようとしています。

while(1):
    try:
            with open('val.txt') as f:
                    break
    except IOError as e:
            continue

f=open("val.txt","r")
counter = f.read()
print counter
f.close()
counter=int(counter)

最初の実行時に、エラーを返します

    counter=int(counter)
    ValueError: invalid literal for int() with base 10: ''

しかし、プログラムをもう一度実行しようとすると、データを取得できます。助けてくれてありがとう=)

更新:Ashwiniのコメントのおかげで、私は問題を解決することができます。他の人が参照できるように、ここにソリューションを残しておきます。

f.close()の後、try-exceptionメソッドを使用して、空の文字列の問題に対処します。どうやら、ファイルが宛先に到達した後も、ファイル内のデータはまだ空です。

while(1):
    try:
            counter= int(counter)
            break
    except ValueError:
            f=open("val.txt","r")
            counter = f.read()
            f.close()
            continue

これはプログラムを書くための効果的な方法ではないと思いますが、それでも問題は解決します。

4

2 に答える 2

2

ファイルが空で、無効な/空の文字列に対してint()このエラーが発生します。

In [1]: int("")

ValueError: invalid literal for int() with base 10: ''

In [2]: int("abc")

ValueError: invalid literal for int() with base 10: 'abc'

In [3]: int("20")
Out[3]: 20

これを修正するためにint()呼び出しをラップすることができます:try-except

try:
    print int("")
except ValueError:
    print "invalid string"

invalid string

#another example 

try:
    print int("23")
except ValueError:
    print "invalid string"

23
于 2013-01-15T15:33:53.797 に答える
0

これを追加するだけです:

counter = f.read()
f.close()
if counter.strip():
   counter = int(counter)
   print counter

ファイルが空の場合は印刷できなくなり、数字に変換できない文字がない限り、エラーは発生しなくなります。

于 2013-01-15T15:54:05.200 に答える