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

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

修复方案

问题分析

  1. 异常捕获范围错误:原代码把函数定义包裹在try块中,但实际报错发生在函数调用阶段,这个try块根本捕获不到运行时的转换错误。
  2. 未处理空白字符:读取的lines[i]包含换行符(\n),直接用int()转换会失败,必须先去除前后空白。
  3. 未处理非法输入:如果test.txt行数为奇数,或者某行不是合法数字,会触发索引越界或转换失败。
  4. 变量命名冲突:函数内部用encrypt作为变量名,和函数名重名,易引发混淆。

修复后的代码

def encrypt(file):
    result = ""
    with open(file, "r") as f:
        # 过滤空行并去除每行前后空白,避免换行符干扰
        lines = [line.strip() for line in f.readlines() if line.strip()]
    
    # 校验行数是否为偶数,防止索引越界
    if len(lines) % 2 != 0:
        raise ValueError("文件行数必须为偶数,每一行数字对应下一行单词")
    
    for i in range(0, len(lines), 2):
        count_str = lines[i]
        # 校验当前行是否为合法数字
        if not count_str.isdigit():
            raise ValueError(f"第{i+1}行不是合法数字:{count_str}")
        count = int(count_str)
        word = lines[i+1]
        # 校验数字是否超过单词长度,避免无效切片
        if count > len(word):
            raise ValueError(f"第{i+1}行的数字{count}超过对应单词{word}的长度")
        result += word[:count] + " "
    
    return result.strip()

if __name__ == '__main__':
    try:
        encrypted_string = encrypt("test.txt")
        print(encrypted_string)
    except Exception as e:
        print(f"错误:{e}")
    finally:
        print(" ")
        print("hello world")

关键修复点

  • 把函数调用逻辑放到try块中,确保运行时错误能被捕获。
  • 预处理文件行,过滤空行并去除空白字符,解决换行符导致的转换失败问题。
  • 添加多层输入校验:检查行数奇偶性、数字合法性、数字与单词长度匹配性,提前抛出明确错误。
  • 重命名函数内的变量,避免和函数名冲突。

测试用例(test.txt内容示例)

3
hello
2
world

运行后输出:hel wo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:52:36