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

RLE转ASCII函数多行输入报错:TypeError参数应为字符串或数字而非列表

修复RLE转换函数的多行处理错误

我来帮你排查这个问题并修复你的RLE转换函数。首先看报错信息:

TypeError: int() argument must be a string or a number, not 'list'

这说明你在尝试把一个列表转换成整数,而不是预期的字符串——咱们来拆解代码里的问题:

问题根源

  1. 变量覆盖问题:
    你在第一个输入循环中用RLEData接收单行输入,但在第二个处理循环的第一次迭代时,把RLEData重新赋值成了分割后的列表。当处理第二行时,RLEData已经是列表类型,再对它做切片分割,得到的是子列表而非RLE片段字符串,自然调用int()时会报错。

  2. 循环变量冲突:
    外层处理循环用i作为变量,内层遍历RLE片段时又用了i,这会覆盖外层的i值,导致代码逻辑混乱(虽然不是这次报错的直接原因,但很容易引发其他问题)。

修复后的代码

def enterRLE(): 
    print('\nYou have selected option 1: Enter RLE') 
    lineNo = 0 
    # 确保用户输入大于2的行数
    while lineNo <= 2: 
        lineNo = int(input('How many lines of RLE would you like to input? Please enter a number over 2. ')) 
    RLEList = [] 
    # 收集所有行的RLE输入
    for _ in range(lineNo): 
        RLEData = input('\nPlease enter one line of RLE and press enter. Enter your code with two digits, for example \'07c\' or \'40a\'. ') 
        RLEList.append(RLEData) 
    # 逐行处理RLE数据
    for current_rle in RLEList: 
        segment_length = 3 
        # 分割当前行的RLE片段
        rle_segments = [current_rle[i:i+segment_length] for i in range(0, len(current_rle), segment_length)] 
        # 遍历每个片段转换为ASCII
        for segment in rle_segments: 
            char_count = int(segment[0:2]) 
            target_char = segment[2:3] 
            print(target_char * char_count, end="") 
        # 每行转换完成后换行,区分不同行的结果
        print()

关键修改点

  • 使用current_rle从RLEList中逐个取出待处理的行,避免复用旧变量导致的类型覆盖。
  • 内层循环改用segment作为变量,彻底避免循环变量冲突问题。
  • 拆分字符重复逻辑,先提取数量和字符再拼接,代码可读性更强。
  • 增加行末换行,让多行转换结果更清晰。

测试这个修复后的函数:当你输入第二行01h01a02l01w01a01y时,会正确输出hallway,并继续处理后续行,不会再抛出类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:34:18