ValueError: empty range for randrange() (0, 0, 0)

211 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本文首发于CSDN。

诸神缄默不语-个人CSDN博文目录

运行环境,报错信息、原因和解决方案: Linux系统,Python3,random包。(在运行过程中使用了其他框架,与本错误无直接关系)

本文的场景是在通用的Python编程情况下会遇到的,是在使用random包的过程中,因为random的随机数取值区间成了(0,-1),这显然是不可以的一种情况,所以就会报如标题所示的错误。 random包是Python官方提供的、用于生成随机数的相关库。 本文解决的就是这一问题。 本文首先介绍系统给出的报错信息,然后介绍这个问题产生的原因和解决方式,最后给出本文撰写过程中使用到的参考资料(网络上的笔记/博文等)。

报错信息:

Traceback (most recent call last):
  File "my_path/myscript.py", line 302, in <module>
    i=random.randint(0,len(val_data)-1)
  File "mypath/lib/python3.8/random.py", line 248, in randint
    return self.randrange(a, b+1)
  File "mypath/lib/python3.8/random.py", line 226, in randrange
    raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
ValueError: empty range for randrange() (0, 0, 0)

问题所在:我发现是因为获取数据(val_data)的过程中出现了问题,导致val_data为空列表,len(val_data)-1为-1,小于0,而random.randint()方法的第二个参数必须大于或等于第1个参数。

解决方式:使randint()的第二个入参大于等于第一个入参,本例中即要求len(val_data)-1>0。 我修改获取数据的代码后,val_data有了元素,len(val_data)-1大于等于0了,就可以正常运行了。

参考资料:

  1. ValueError: empty range for randrange() (1,1, 0)_醉小义的博客-CSDN博客
  2. random.randint()的官方文档