2017-02-21 4 views
0

내 코드 :수 없습니다

myFile = open('Numbers.txt', 'r') 

counter = 0 
total = 0 

num = myFile.read() 

while num != '': 
    counter += 1 
    num = num.rstrip('\n') 
    n = float(num) 

    total += n 
    num = myFile.read() 

myFile.close() 

print 'Total sum: ' , total 
print 'Num of random numbers: ', counter 

내가 얻을 : 여기 ValueError: invalid literal for float()
: 다른 사람이 제안한 것처럼 n = float(num)

+2

내용이 무엇인지 보려면'num'을 인쇄 해 보셨습니까? –

+0

인쇄되지 않는 문자가있을 수 있습니다. 'print repr (temp)'시도 –

+0

다른 줄에있는 숫자를 읽으려고합니까? 'read' 대신'readlines'을 사용하고 라인을 반복하십시오. – Fejs

답변

1

의 무언가가있다 string은 float 변환을 차단합니다. 일반적인 디버깅 힌트로 문제가 아니라

with open('Numbers.txt', 'r') as myFile: 
    total = 0 

    for counter, line in enumerate(myFile): 
     num = line.rstrip('\n') 
     try: 
      n = float(num) 
     except ValueError: 
      print(repr(temp)) 
     total += n 
0

f.read(size)를 다시 작성하는 데 도움이 될

try: 
    n = float(num) 
except ValueError: 
    print(repr(temp)) 

를 일으키는 일부 데이터 량을 읽고 문자열로 돌려 상황을 확인하기 위해 오류를 잡을 수있어. size을 생략하거나 음수 일 경우 파일의 전체 내용을 읽고 반환합니다. 예를 들어, 파일의 내용이

반환

3.0 
4.0 
5.0 

,

'3.0\n4.0\n5.0' 

당신이 볼 수 있듯이, 문자열은 float()에 대한 문자 그대로 유효하지 않습니다.


, 당신의 목표를 달성 myFile.readline()myFile.read()를 교체하십시오. 아니면 좀 더 파이썬적인 방법으로하십시오.

counter = 0 
total = 0 

with open('test.txt', 'r') as f: 
    for line in f: 
     counter += 1 
     num = float(line.strip()) 
     total += num 

print(counter, total) 
# (3, 12.0) 
+0

'.strip()'이 필요 없습니다. – gboffi