![](/img/trans.png)
[英]ValueError: invalid literal for int() with base 10: b'1\n5\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.