繁体   English   中英

ValueError:int()以10为底的无效文字:'\\ n'

[英]ValueError: invalid literal for int() with base 10: '\n'

我正在寻找使用我的特定代码对此错误的答案。 我搜索了其他人,但他们仍然如此困惑。

我不确定为什么会这样。

这是错误所引用的代码部分,后跟错误。

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'

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

这给您带来麻烦:

编辑:也正如@PadraicCunningham所指出的那样,您没有调用isdigit().. missing()

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

您只检查line[0]是数字,然后将整行转换为start ,该line可能包含Tab或Space或Linefeed。

请尝试以下方法: start = int(line[0])

同样,为了更简洁的方法,您应该对要检查的每一行都进行strip()处理,为了安全起见,以防传递的数据像"5k"您的逻辑需要更安全一些 ,您可以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检查先前条件是否已满足,则应使用if/elif来避免不必要的操作。

替换:

start = int(line) 

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

或者,如果要添加数字而不是第一位数字,则可以使用.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

如果想法是检查第一行是否有数字,那么如何使用读取行而不是逐行循环? 这样的事情。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM