我正在寻找使用我的特定代码来解决此错误的答案。我搜索了其他人,他们仍然很混乱。
我不确定为什么会这样。
以下是错误引用的代码部分,后跟错误。
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'
谢谢大家,如果我在其他帖子中找不到明确的答案,我不会发布这个
答案 0 :(得分:6)
这给你带来了麻烦:
编辑:同样@PadraicCunningham指出,你不是在调用isdigit()..缺少()
if line[0].isdigit():
start = int(line)
您只检查line[0]
是否为数字,然后将整行转换为start
,line
可能包含制表符或空格或换行符。
请改为: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