为何Sequence类的getValueRange等方法会触发TypeError?
解决Sequence类中TypeError: 'int' object is not iterable的问题
错误原因
你代码里的getValueRange和getValueList方法中,用了nums += self.getValueAt(i)来添加元素,但+=操作符作用于列表时,要求右侧必须是可迭代对象(比如列表、元组这类能逐个取出元素的结构)。而getValueAt返回的是单个整数,整数不属于可迭代对象,所以触发了TypeError。
修复方案
有两种简单的修复方式,选一种就行:
方式1:用append()方法添加单个元素
append()是列表专门用来添加单个元素的方法,直接把整数传进去就行:
def getValueRange(self, pos1: int, pos2: int) -> list: nums = [] for i in range(pos1, pos2): nums.append(self.getValueAt(i)) return nums def getValueList(self, pos_list: list): nums = [] for i in pos_list: nums.append(self.getValueAt(int(i))) return nums
方式2:把整数包装成列表再用+=
如果习惯用+=,可以把单个整数放进列表里,让右侧变成可迭代对象:
def getValueRange(self, pos1: int, pos2: int) -> list: nums = [] for i in range(pos1, pos2): nums += [self.getValueAt(i)] return nums def getValueList(self, pos_list: list): nums = [] for i in pos_list: nums += [self.getValueAt(int(i))] return nums
修复后的完整代码
class Sequence: def __init__(self, term: str, var: str): self.term = term self.var = var def getValueAt(self, pos: int) -> int: return int(eval(self.term.replace(self.var, str(pos)))) def getValueRange(self, pos1: int, pos2: int) -> list: nums = [] for i in range(pos1, pos2): nums.append(self.getValueAt(i)) return nums def getValueList(self, pos_list: list): nums = [] for i in pos_list: nums.append(self.getValueAt(int(i))) return nums sq = Sequence("5*x-6", "x") print(sq.getValueAt(1)) print(sq.getValueAt(2)) print(sq.getValueRange(4, 44)) print(sq.getValueList([5, 9, 27]))
内容的提问来源于stack exchange,提问作者Amogus
相关产品推荐
相关产品推荐

