Python3.7的random.py中出现序列与float相乘的TypeError问题求助
TypeError: can't multiply sequence by non-int of type 'float' in Python 3.7's random.py
这个错误是Python 3.7版本random.py模块里的典型问题,当你遇到result = [None] * k这段代码执行时,如果k是浮点数类型(尤其是当k > 5时触发),就会抛出这个明确的报错:
TypeError: can't multiply sequence by non-int of type 'float'
问题根源
Python里的序列类型(比如示例中的列表[None])只支持和整数相乘,用来生成重复元素的新序列。如果k是浮点数(比如6.0),解释器会直接拒绝这个操作——毕竟你没法用一个带小数的次数来重复生成序列元素。
你提到的相关代码片段:
result = [None] * k setsize = 21 # size of a small set minus size of an empty list
这里的k大概率是在某个随机采样逻辑中被意外计算成了浮点数,比如用普通除法/得到非整数结果,或者外部传入的参数本身就是float类型。
解决办法
强制转换k为整数类型:如果是你自己调用相关函数时传入了浮点数参数,先把它转成整数,比如:
k = int(your_k_value) # 若需要四舍五入,可改用round(your_k_value)注意
int()会直接截断小数部分,根据你的业务场景选择合适的取整方式。改用整数除法:如果
k是通过计算得到的,确保用整数除法//代替普通除法/,避免得到浮点数结果:# 错误示例:会得到浮点数 k = total_count / 2 # 正确示例:得到整数结果 k = total_count // 2升级Python版本:Python 3.7已经是比较老旧的版本了,后续的Python版本(比如3.8+)在这类参数校验上更严谨,也可能修复了
random模块中导致k意外变成浮点数的边缘逻辑问题。
内容的提问来源于stack exchange,提问作者user11318404
相关产品推荐
相关产品推荐

