2013-01-15 150 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 

這將阻止打印,如果該文件是空的,除非你有不能轉換成數字的字符,你不會再有任何錯誤。