2013-01-15 148 views
0

我试图从另一台机器上获取一些数据在文本文件中发送。在python中读取文件时出错

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 

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

回答

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 

您可以环绕try-exceptint()呼吁解决这个问题:

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

invalid string 

#another example 

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

23 
+0

感谢您的回复。你可以指导我到一个网站或可能解释int()以及为什么它会工作?其次,文件为什么会出现这种现象?即使我把f.seek(0)它仍然给空串。 –

0

只需补充一点:

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

这将阻止打印,如果该文件是空的,除非你有不能转换成数字的字符,你不会再有任何错误。