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 回答