在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),它仍然给出空字符串。