Python TypeError求助:NoneType与int无法执行除法运算
解决TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'错误
错误根源
你代码里的核心问题出在firstList的初始化和填充逻辑上:
firstList = [None] * 30直接创建了一个包含30个None元素的列表funcOne中用append添加随机值,新元素会被放在列表末尾,导致firstList实际是30个None+ 1个随机整数的结构funcTwo遍历整个firstList时,前30个None元素尝试执行i/2,自然触发类型错误,因为None不能和整数做除法运算
修复方案
根据你的需求(生成单个值存入firstList,再处理该值),提供两种可行修复方式:
方式一:修正firstList初始化逻辑(推荐)
直接把firstList初始化为空列表,避免预填充None:
from random import randint import random finalList = [None] * 100 firstList = [] # 改为空列表,不再预填充None secondList = [] def funcOne(): global firstList # 无需循环,直接添加单个随机值 firstList.append(random.randrange(11,12,1)) return firstList def funcTwo(): global finalList, secondList finalList[0] = firstList.copy() # 用copy避免后续修改firstList影响finalList for i in firstList: secondList.append(i / 2) # 修正整数加列表的错误:给secondList每个元素加5 finalList[1] = [num + 5 for num in secondList] print(finalList) # 移到return前,否则不会执行 return finalList funcOne() funcTwo()
方式二:保留firstList结构,过滤无效元素
如果你确实需要firstList保留30个位置,遍历的时候只处理非None的元素:
from random import randint import random finalList = [None] * 100 firstList = [None] * 30 secondList = [] def funcOne(): global firstList # 替换某个位置的None,而不是append(比如替换第一个位置) firstList[0] = random.randrange(11,12,1) return firstList def funcTwo(): global finalList finalList[0] = firstList # 只遍历非None的元素 for i in firstList: if i is not None: secondList.append(i / 2) # 修正整数加列表的错误 finalList[1] = [num + 5 for num in secondList] print(finalList) return finalList funcOne() funcTwo()
额外注意点
funcTwo中原代码的5 + secondList会触发新错误,因为整数不能直接和列表相加,改成列表推导式给每个元素加5才符合逻辑return finalList之后的print(finalList)永远不会执行,必须把print移到return语句之前- 操作全局变量时,要确保所有被修改的全局变量都用
global声明(比如secondList),否则会被当作局部变量处理
内容的提问来源于stack exchange,提问作者Moonlyte Demon
相关产品推荐
相关产品推荐

