You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Python中ValueError: invalid literal for int() with base 10错误?

问题分析与修复方案

嘿,我来帮你拆解一下这个报错的原因,其实问题出在你对input()函数的使用和实际输入格式不匹配上!

为什么会报错?

你写的代码里,n=int(input())是每次调用input()读取一整行输入,然后尝试把这行内容转成整数。但你的实际输入是把所有内容都挤在同一行里(比如4 n hgh hjhgj jhh 1 jghj 3)——这时候第一次调用input()拿到的是整串包含字母、数字和空格的字符串,你试图把它转成整数,Python自然会抛出invalid literal for int() with base 10的错误,因为这根本不是一个合法的整数呀!

你误以为input()会自动按空格分割内容,但实际上input()默认只会读取一整行,直到你按下回车为止。你的代码逻辑是“先输入一个整数n,再输入n个字符串(每个字符串一行)”,但你的实际输入是把所有内容放在一行里,两者不匹配,才导致了错误。

修复方案

要处理这种“一行内包含所有输入元素”的场景,我们可以先把整行输入按空格拆分成独立的元素(也就是token),然后用一个指针来逐个遍历这些元素,按顺序提取n和对应的字符串。修改后的代码如下:

# 读取整行输入,按空格分割成所有元素的列表
tokens = input().split()
ptr = 0  # 指针,记录当前处理到哪个元素
A = [[], [], []]

# 循环处理3组数据
for i in range(3):
    # 提取当前组的n值
    n = int(tokens[ptr])
    ptr += 1
    # 提取接下来的n个字符串,加入对应的子列表
    for _ in range(n):
        A[i].append(tokens[ptr])
        ptr += 1

# 可以打印验证结果
print(A)

为什么这个方案可行?

  • input().split()会把整行(甚至多行,因为split()会自动忽略换行符)的输入按空格分割成一个字符串列表,不管你的输入是一行还是多行,只要元素是空格分隔的,都能正确拆分。
  • 我们用ptr指针来跟踪当前处理到哪个元素,先取第一个元素转成n,再连续取n个元素作为字符串,完美匹配你想要的“先n,再n个字符串”的逻辑。

如果之后你想支持多行输入(比如每组数据单独占几行),那原来的代码其实是可以用的,但前提是你要按照“先输入n,再换行输入n个字符串(每个一行)”的格式来输入哦~

内容的提问来源于stack exchange,提问作者ermia.l

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:45:46