提问人:ChathurawinD 提问时间:7/6/2023 最后编辑:Peter234ChathurawinD 更新时间:7/6/2023 访问量:112
以 10 为基数的 int() 的文本无效:尝试转换字符串文本时
invalid literal for int() with base 10: when try to convert a string literal
问:
我正在尝试从文件中读取文本,然后逐个浏览字符串中的字符并将其转换为数字,然后进行一些算术运算。我在此处提供的代码中没有包含算术运算部分。我尝试在循环之前访问 fo.read(c) 行的类型,它为我提供了字符串形式的类型。
但是当我尝试将其转换为整数时,它给了我错误line 9, in <module> num = int(text)ValueError: invalid literal for int() with base 10: ''
我确保文本文件中包含的字符是数字。
以下是我尝试过的代码。
fn = 0
fo=open("SSS.txt",'r')
c = 0
num = 0
while c < 10:
text = fo.read(c)
print(text)
num = int(text)
fo.close()
答:
1赞
rr_goyal
7/6/2023
#1
当 c=0 时打印 fo.read(c) 的值时,输出为 “”,这是一个空字符串;并且不能转换为数字。因此,必须跳过它以确保不会发生此错误。当到达文件末尾但循环仍在运行时,需要考虑相同的情况。
代码的另一个问题是你没有更新 c 的值,这将成为一个无限循环。我已经通过从这里参考来纠正你的答案。
with open("SSS.txt",'r') as fo:
c = 1
while c<10:
text = fo.read(1)
""" Checking if text is an empty string,
the case where your loop is still running but\
the end of file has been reached."""
if text != "":
num = int(text)
print(text)
# Updating the value of c.
c+=1
注 - “在处理文件对象时,最好使用 ”with“ 关键字。优点是文件在其套件完成后会正确关闭,即使在某个时候引发了异常。
此外,read() 函数将 size 作为输入参数,表示要读取的字符数。它一直保持为 1 以逐个字符读取文件。
1赞
Chetha Widasith
7/6/2023
#2
您可以改进之前的答案,如下面的代码所示。
with open("SSS.txt",'r') as fo:
c = 1
num = 0
myall = fo.read()
print(myall)
num = int(len(myall))
print(num)
fo.seek(0)
while c <= num:
txt = fo.read(1)
if(txt != ""):
newtxt = int(txt)
print(newtxt)
c+=1
fo.close()
评论
text