Python十六进制转RGB时出现invalid literal错误求助
问题分析与修复方案
看起来你遇到的问题不是rgbList数组的问题,而是数据导入和处理环节混入了无效字符,导致转换函数收到了非十六进制的内容。咱们来一步步理清:
错误根源定位
错误提示 invalid literal for int() with base 16: '<' 已经很明确:当调用 int(..., 16) 转换十六进制字符串时,传入的是 < 这个字符——这显然不是合法的十六进制字符(合法范围是0-9、a-f、A-F)。
问题出在你从文件导入并分割后的 hexArray 里,存在无效元素,而非 rgbList 本身。
数据处理环节的坑
你当前的代码用了 hexArray = str(pixelFile).split("."),这里有两个致命问题:
- 如果
pixelFile是文件对象(比如用open()打开的对象),直接转成字符串会得到类似<_io.TextIOWrapper name='xxx.txt' mode='r' encoding='utf-8'>的内容,这就包含了错误提示里的<字符! - 原数据格式是
82afe8.82afe6.82b0e4.,末尾有个多余的.,分割后会生成一个空字符串元素,这也会导致后续转换失败。
修复步骤
1. 正确读取文件内容
不要直接把文件对象转成字符串,应该读取文件里的实际内容:
# 替换成你的文件名 with open("pixel_data.txt", "r") as pixelFile: content = pixelFile.read().strip() # 读取内容并去除首尾空白字符
2. 清理分割后的数组
分割后过滤掉空字符串和非十六进制的无效元素:
hexArray = content.split(".") # 只保留非空且全是合法十六进制字符的元素 valid_hex_array = [item for item in hexArray if item and all(c in "0123456789abcdefABCDEF" for c in item)]
3. 安全执行转换
用清理后的数组来执行转换,同时可以预先初始化 rgbList 避免索引问题:
rgbList = [] for hex_str in valid_hex_array: rgbList.append(hex_to_rgb(hex_str))
验证转换函数
你的 hex_to_rgb 函数逻辑是没问题的,比如测试有效输入:
print(hex_to_rgb("82afe8")) # 输出 (130, 175, 232)
内容的提问来源于stack exchange,提问作者Leo Gaunt
相关产品推荐
相关产品推荐

