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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:54:20