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

Ubuntu终端用sys.stdin.readline()输入Python多行内容报错排查

问题排查与修复方案

核心报错原因

  • 代码全局作用域存在多余的预读取逻辑:在类定义前写的print(sys.stdin.readline())会在程序启动、主逻辑执行前优先读取标准输入的第一行内容。当输入格式正确时,第一行的节点数5会被这行代码提前读走,等到TreeHeight.read()方法执行self.n = int(sys.stdin.readline())时,实际读到的是第二行的父节点列表字符串4 -1 4 1 1,将包含空格和多个数字的字符串直接转为整数必然触发ValueError。
  • 前期尝试的here-string传参、test_case文件前两种内容格式本身不符合输入规范:程序要求两行独立输入,第一行单独放节点总数,第二行放父节点列表,把两行内容拼接为单行的写法,即使修复代码问题也无法正确读取。

修复步骤

  1. 清理多余调试代码:删除全局作用域下的print(sys.stdin.readline())行,保留read方法内的标准读取逻辑即可,修正后的输入相关代码如下:
import sys, threading
sys.setrecursionlimit(10**7) # 递归最大深度设置
threading.stack_size(2**27)  # 新线程栈大小设置

class TreeHeight:
        def read(self):
                self.n = int(sys.stdin.readline())
                self.parent = list(map(int, sys.stdin.readline().split()))
                # 调试打印可保留
                print("Self.n is ",self.n)
                print("self.parent is ",self.parent)

        def compute_height(self):
                # 保留原有正确计算逻辑即可
                pass

def main():
  tree = TreeHeight()
  tree.read()
  print(tree.compute_height())

threading.Thread(target=main).start()
  1. 准备符合格式的测试输入:
    • 若用文件重定向方式,新建test_case纯文本文件,内容严格写为两行,不要加反斜杠、多余转义符:
      5
      4 -1 4 1 1
      
      保存后执行命令即可正常读取:
      python3 tree-height.py < test_case
      
    • 若用终端here-string方式传参,需要显式声明换行,不要用反斜杠转义空格拼接单行内容,正确命令为:
      python3 tree-height.py <<< $'5\n4 -1 4 1 1'
      
      该写法通过bash的$'...'语法让shell正确解析\n为换行符,传入的内容和两行格式的文件完全一致。

验证标准

代码修复、输入格式正确后,控制台会先打印Self.n is 5,再打印self.parent is [4, -1, 4, 1, 1],最终输出树高计算结果3。


内容的提问来源于stack exchange,提问作者LordCakenator

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:42:09