I am looking for an answer to this error with my specific code. I have searched the others and they are still so confusing.
I am unsure why this is happening.
Here is the code section that the error is referencing, followed by the error.
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
The error message I'm getting:
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'
Thanks everyone, I wouldn't be posting this if i didnt find a clear answer in the other posts
This is giving you trouble:
edited: also as pointed by @PadraicCunningham, you're not calling the isdigit().. missing ()
if line[0].isdigit():
start = int(line)
You're checking only line[0]
is digit and then convert the whole line to start
, the line
could possibly contain Tab or Space or Linefeed.
Try this instead: start = int(line[0])
Also for a cleaner approach, you should strip() each line you're checking, and for the safe side in case the data being passed are like "5k"
your logic needs to be a bit more SAFE , which you can use a try/except
approach:
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 ...
As a side note, you should use if/elif
to avoid unnecessary if
checking if previous condition has already met.
replace :
start = int(line)
to
start = int(line.strip()) # strip will chop the '\n'
Alternatively, if you want to add the number instead of the first digit, you can use .strip() to remove any whitespace and newlines.
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
if the idea is to check the first line for a digit, how about using readlines instead of looping line by line; something like this.
I also think using regex is better
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)
credit: regex borrowed from here https://stackoverflow.com/a/22112198/815677
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.