Python报错ValueError:元素不在列表中但实际存在的问题排查
问题根源与解决方法
核心错误:列表元素定义错误
你写的List1始终没有把单个字符作为列表的独立元素:
- 最初的写法
List1= [string.digits+string.ascii_uppercase],是把数字串+字母串拼接成的一整个长字符串作为列表的唯一元素。比如List1实际是["0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"],当你用List1.index('2')时,是在列表里找等于'2'的元素,显然不存在,所以触发ValueError。 - 修改后的写法
List1= ['0', '1', '2', ..., '9'+string.ascii_uppercase],最后一个元素是'9'和字母串拼接的长字符串(比如"9ABCDEFGHIJKLMNOPQRSTUVWXYZ"),只有前10个元素是单个数字,字母并没有被拆分成独立元素,输入字母时依然会报错,哪怕输入'2'能找到,但逻辑依然错误。
正确的列表定义方式
要生成每个数字、大写字母作为独立元素的列表,直接把拼接后的字符串转成列表即可:
import string # 方式1:直接转列表 List1 = list(string.digits + string.ascii_uppercase) # 方式2:列表推导式(效果和方式1一致) List1 = [c for c in string.digits + string.ascii_uppercase]
这样List1的每个元素都是单个字符,比如['0','1','2',...,'9','A','B',...,'Z'],调用List1.index('2')就能正确返回索引2。
额外的潜在问题
你的get_ID函数中DotPosit没有初始值,如果输入的ID不含.,函数执行时会因DotPosit未定义报错。可以给它加个默认值,比如:
def get_ID(NotlistNum): num = [] DotPosit = -1 # 默认值,表示没有找到点 NotlistNum = NotlistNum.upper() for digits in NotlistNum: if digits == '.': DotPosit = len(num) else: num.append(List1.index(digits)) return [num, DotPosit]
内容的提问来源于stack exchange,提问作者Taokyle
相关产品推荐
相关产品推荐

