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

Python代码自定义输入触发ValueError,但运行时输入正常,请求排查错误

问题排查与解决方案

首先,咱们来拆解一下你遇到的报错根源:
这个ValueError本质是代码在尝试读取边的端点时,拿到了空字符串——核心问题是输入格式和代码的预期不匹配。

为什么手动输入正常,但粘贴整段文本就报错?

你的代码预设的输入格式是这样的:

  • 第一行:两个整数,分别是节点数node和边数edge
  • 接下来连续edge行:每行两个整数,表示一条边的两个端点

而你提供的输入是把所有数字(包括node、edge和所有边的端点)都挤在了同一行。这就导致:

  1. 第一次input()读取了整行内容,拆分出node=14和edge=12,把这两个数用掉了;
  2. 接下来代码要循环12次读取边的信息,但此时已经没有下一行输入了(所有内容都在第一行读完了),所以input()返回空字符串,split(" ")后得到[''],用int()转换空字符串自然就触发报错了。

两种解决办法

办法1:按照代码预期的格式输入

把输入内容拆分成多行,符合代码的读取逻辑:

14 12
0 1
0 4
0 2
1 3
1 4
3 5
5 6
5 7
6 8
2 11
11 10
9 13

这样不管是手动输入还是粘贴,代码都能正常运行。

办法2:修改代码兼容整行输入

如果希望输入可以是一整串数字(不用换行),可以修改代码一次性读取所有输入内容,再按顺序处理。同时还要修正原代码的一个小bug:最后打印邻接表时,原代码循环的是range(edge),这会漏掉编号大于边数的节点,应该循环节点编号范围range(node + 1)。修改后的代码如下:

import sys
# 一次性读取所有输入的数字,自动忽略换行和空格
all_numbers = list(map(int, sys.stdin.read().split()))
index = 0
# 取出节点数和边数
node, edge = all_numbers[index], all_numbers[index + 1]
index += 2

adjList = [[] for _ in range(node + 1)]
for _ in range(edge):
    u, v = all_numbers[index], all_numbers[index + 1]
    index += 2
    adjList[u].append(v)
    adjList[v].append(u)

print("Adjacency list unweighted:")
# 遍历所有节点打印邻接表
for i in range(node + 1):
    print(i, " ---> ", end=" ")
    for neighbor in adjList[i]:
        print(neighbor, end=" ")
    print()

内容的提问来源于stack exchange,提问作者Juboraj Roy Pavel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:32:29