ValueError:基数为10的int()的无效文字:' \ n'

时间:2015-01-18 00:48:11

标签: python

我正在寻找使用我的特定代码来解决此错误的答案。我搜索了其他人,他们仍然很混乱。

我不确定为什么会这样。

以下是错误引用的代码部分,后跟错误。

def processScores( file, score):
#opens file using with method, reads each line with a for loop. If content in line
#agrees with parameters in  if statements, executes code in if statment. Otherwise, ignores line    

    with open(file,'r') as f:
        for line in f:  #starts for loop for all if statements
            if line[0].isdigit: 
                start = int(line) 
                score.initialScore(start) #checks if first line is a number if it is adds it to intial score

我收到的错误消息:

    Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    processScores('theText.txt',score)
  File "C:/Users/christopher/Desktop/hw2.py", line 49, in processScores
    start = int(line)
ValueError: invalid literal for int() with base 10: '\n'

谢谢大家,如果我在其他帖子中找不到明确的答案,我不会发布这个

4 个答案:

答案 0 :(得分:6)

这给你带来了麻烦:

编辑:同样@PadraicCunningham指出,你不是在调用isdigit()..缺少()

if line[0].isdigit(): 
    start = int(line)

您只检查line[0]是否为数字,然后将整行转换为startline可能包含制表符或空格或换行符。

请改为:start = int(line[0])

另外,为了更清洁的方法,您应该剥离()您正在检查的每一行,并且为了安全起见,以防传递的数据类似"5k"您的逻辑需要更多 SAFE ,您可以使用try/except方法:

for line in f:
    line = line.strip()
    # edited: add `if line and ...` to skip empty string
    if line and line[0].isdigit():
        try:
            start = int(line) 
            score.initialScore(start)
        except ValueError:
            # do something with invalid input
    elif #... continue your code ...

作为旁注,您应该使用if/elif来避免在先前条件已经满足的情况下进行不必要的if检查。

答案 1 :(得分:0)

替换:

start = int(line) 

start = int(line.strip())   # strip will chop the '\n' 

答案 2 :(得分:0)

或者,如果要添加数字而不是第一个数字,可以使用.strip()删除任何空格和换行符。

if line.strip().isdigit(): 
    start = int(line.strip()) 
    score.initialScore(start) #checks if first line is a number if it is adds it to intial score

答案 3 :(得分:0)

如果想要检查数字的第一行,那么如何使用readlines而不是逐行循环;像这样的东西。

我也认为使用正则表达式更好

import re
def processScores( file, score):
#opens file using with method, reads each line with a for loop. If content in line
#agrees with parameters in  if statements, executes code in if statment. Otherwise, ignores line    

    f = open(file,'r')
    lines_list = f.readlines()
    if bool(re.search("^-?\\d*(\\.\\d+)?$",'-112.0707922')): 
        start = int(lines_list[0]) 
        score.initialScore(start)

信用:正则表达式从这里借来https://stackoverflow.com/a/22112198/815677