在python中读取文件时出错

在python中读取文件时出错,python,file,Python,File,我正试图从另一台机器上获取文本文件中发送的一些数据 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) 在第一次执行

我正试图从另一台机器上获取文本文件中发送的一些数据

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异常方法来抵消空字符串问题。显然,一旦文件刚刚到达目的地,文件中的数据仍然是空的

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

我猜这不是编写程序的有效方法,但它仍然解决了问题。

您的文件是空的,对于无效/空字符串
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
只需添加以下内容:

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

如果文件为空,它将阻止打印,并且除非您有无法转换为数字的字符,否则您将不会再收到任何错误。

谢谢您的回复。你能告诉我一个网站吗?或者解释一下int()的用法,以及为什么它会起作用?其次,为什么文件中会出现这样的现象?即使我放置f.seek(0),它仍然给出空字符串。