You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中randint引发异常输出的原因及替代方案

问题成因与解决方案

异常成因

核心问题是每次调用rol_rand()都会生成一个全新的随机数,而代码里的if/elif/else每个分支判断时都调用了这个函数,导致每个分支校验的是不同的随机结果。

举个实际触发异常的流程:

  1. 第一个if判断调用rol_rand(),随机得到0,满足条件,打印value 1
  2. 进入下一个elif判断,再次调用rol_rand(),这次随机得到2,不满足条件
  3. 再进入下一个elif判断,第三次调用rol_rand(),随机得到1,还是不满足
  4. 最终进入else分支,第四次调用rol_rand()打印结果,再输出rol don't exist
    这就出现了你看到的value 1和rol don't exist同时输出的情况。

另外代码里的global rol_list属于冗余代码,既没定义过也没用到,不影响异常,但可以删掉。

替代解决方案

方案一:单次生成随机结果,复用变量

只调用一次随机函数,把结果存到变量里,后续所有判断都用这个变量,确保逻辑基于同一个随机值:

from random import randint

rol_dict = { 0: "value 1", 1: "value 2", 2: "value 3" }

def rol_rand():
    return rol_dict.get(randint(0, 2))

# 仅生成一次随机结果,后续判断复用
current_result = rol_rand()

if current_result == rol_dict.get(0):
    print("value 1")
elif current_result == rol_dict.get(1):
    print("value 2")
elif current_result == rol_dict.get(2):
    print("value 3")
else:
    print(current_result)
    print("rol don't exist")

方案二:随机键直接取值,逻辑更直观

直接随机字典的键,再通过键获取对应值,因为随机范围是0-2,刚好覆盖字典的所有键,甚至可以去掉多余的else分支:

from random import randint

rol_dict = { 0: "value 1", 1: "value 2", 2: "value 3" }

# 随机生成合法键
random_key = randint(0, 2)
current_result = rol_dict[random_key]

print(current_result)

方案三:用random.choice直接选值,代码更简洁

如果不需要关注键,直接用random.choice从字典的值里随机选一个,一步到位:

from random import choice

rol_dict = { 0: "value 1", 1: "value 2", 2: "value 3" }

current_result = choice(list(rol_dict.values()))
print(current_result)

内容的提问来源于stack exchange,提问作者toxfu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:53:12