运行RollDieDynamic.py报index out of range错误求助
RollDieDynamic.py索引越界问题排查修复
你遇到的IndexError: list index out of range报错和核心掷骰子、绘图逻辑无关,问题出在启动参数读取环节。
根因定位
报错对应的是以下两行代码:
number_of_frames = int(sys.argv[1]) rolls_per_frame = int(sys.argv[2])
- 这个脚本的原始设计是必须通过命令行传入2个启动参数运行:第一个参数是动画总帧数,第二个是单帧内掷骰子的次数,参数会按顺序存在
sys.argv列表中 sys.argv列表默认索引0的元素是脚本自身的文件路径,你直接在PyCharm中点击运行按钮启动时,没有传入额外参数,列表长度只有1,此时强行取索引1、2的元素必然触发索引越界。
修复方案(二选一即可)
- 方案1:配置PyCharm运行参数(匹配原书使用逻辑)
- 点击PyCharm右上角运行配置的下拉箭头,选择「Edit Configurations...」
- 选中当前运行的
RollDieDynamic.py配置项,在「Parameters」输入框填入两个空格分隔的整数,比如600 10,代表总共渲染600帧动画,每帧掷10次骰子 - 保存配置后重新运行脚本即可
- 方案2:给代码增加默认值,无需传参直接运行
直接替换原有的命令行参数读取代码,增加无参数时的默认逻辑:# 未传命令行参数时,默认运行600帧、每帧掷10次 number_of_frames = int(sys.argv[1]) if len(sys.argv) > 1 else 600 rolls_per_frame = int(sys.argv[2]) if len(sys.argv) > 2 else 10
其他常见运行坑点
- 如果修复参数问题后,在
sns.barplot行报错,是因为你安装的seaborn版本过高,新版本不支持直接传入位置参数,把该行修改为显式指定x、y参数即可:axes = sns.barplot(x=faces, y=frequencies, palette='bright') - 你粘贴的源码存在多处被换行截断的字符串、错误缩进(比如f-string标题、函数注释被拆成了多行),运行前要保证所有代码块缩进正确、字符串没有被强行换行拆分,否则会触发语法错误。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

