Coursera沙箱正常运行的Python代码本地Python3环境运行异常排查
问题背景
Python初学者此前在Chromebook设备上参与Coursera平台Python课程学习,长期使用平台提供的沙箱编辑器编写练习代码。近期购置PC设备搭建本地Python环境后,发现自己编写的训练记录代码在沙箱中可正常运行,但在本地Python环境运行时会异常退出。
代码预期实现逻辑:
- 接收用户输入的训练日期、训练项目
- 循环询问用户每组训练的「次数×重量」信息,将结果以元组形式存储在字典中
- 用户输入
0时退出录入循环,打印所有录入的记录
原问题代码:
dt = input("Date:") ex = input("Exercise:") d = dict() set = 0 while True: wrk = input("Insert as Reps x Weight: ") if wrk == "0": break set = set + 1 d[set] = wrk print(dt) print(ex) print(d)
故障原因
- 变量命名不规范:使用Python内置类型名
set作为自定义变量名,会覆盖内置的集合构造方法,部分沙箱环境会做命名空间隔离不会触发异常,但本地标准Python环境中该写法很容易诱发不可预期的运行错误。 - 缺少输入容错逻辑:Coursera沙箱环境运行代码时一般会注入预设的合法测试用例,且自带输入异常兜底,不会因为输入格式不符合预期直接终止程序;但本地Python环境没有这层兜底,如果用户输入的内容不是预期格式,程序会直接抛出错误异常退出。
- 未实现元组存储逻辑:原代码直接将用户输入的整段字符串存入字典,没有做拆分转换,完全不符合「以元组形式存储」的设计预期。
修正后代码
dt = input("Date:") ex = input("Exercise:") train_record = dict() set_count = 0 while True: wrk = input("Insert as Reps x Weight: ").strip() if wrk == "0": break # 拆分输入转换为元组,增加异常捕获 try: # 兼容大小写x、输入带空格的情况 reps, weight = [int(v.strip()) for v in wrk.lower().split("x")] set_count += 1 train_record[set_count] = (reps, weight) except (ValueError, IndexError): print("输入格式无效,请按「次数x重量」格式输入,例:15x40,输入0可退出录入") continue print("\n=== 训练记录汇总 ===") print(f"训练日期:{dt}") print(f"训练项目:{ex}") for set_num, group_data in train_record.items(): reps, w = group_data print(f"第{set_num}组:{reps}次 × {w}重量单位")
修正说明
- 把和内置类型重名的变量
set改名为set_count,从根源避免内置命名被覆盖导致的异常 - 新增输入拆分转换逻辑,将用户输入的字符串按
x拆分、转成整数后组装为元组存储,匹配最初的功能预期 - 增加输入异常捕获逻辑,用户输入格式错误时给出提示而非直接崩溃,解决本地环境无沙箱兜底就异常退出的问题
- 兼容用户输入带空格、大写X的场景,输入体验更流畅
内容的提问来源于stack exchange,提问作者PeterFonteneau
相关产品推荐
相关产品推荐

