Python中randint引发异常输出的原因及替代方案
问题成因与解决方案
异常成因
核心问题是每次调用rol_rand()都会生成一个全新的随机数,而代码里的if/elif/else每个分支判断时都调用了这个函数,导致每个分支校验的是不同的随机结果。
举个实际触发异常的流程:
- 第一个
if判断调用rol_rand(),随机得到0,满足条件,打印value 1 - 进入下一个
elif判断,再次调用rol_rand(),这次随机得到2,不满足条件 - 再进入下一个
elif判断,第三次调用rol_rand(),随机得到1,还是不满足 - 最终进入
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
相关产品推荐
相关产品推荐

