以 10 为基数的 int() 的文本无效:尝试转换字符串文本时

invalid literal for int() with base 10: when try to convert a string literal

提问人:ChathurawinD 提问时间:7/6/2023 最后编辑:Peter234ChathurawinD 更新时间:7/6/2023 访问量:112

问:

我正在尝试从文件中读取文本,然后逐个浏览字符串中的字符并将其转换为数字,然后进行一些算术运算。我在此处提供的代码中没有包含算术运算部分。我尝试在循环之前访问 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()
Python 类型转换 整数

评论

0赞 ChathurawinD 7/6/2023
@blhsing 它仍然给我同样的错误。
1赞 Peter234 7/6/2023
在抛出异常之前,您是否检查过 的内容?text
0赞 ChathurawinD 7/6/2023
@Peter234是的,我做到了。

答:

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()