You need to enable JavaScript to run this app. Python自定义catch_error_yn函数运行失效原因及修复方法咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义catch_error_yn函数运行失效原因及修复方法咨询

故障核心原因
  • 自定义函数缺失核心交互环节:catch_error_yn内部没有调用input()获取用户输入,反而硬编码给response连续赋值"Yes"、"No",既没有交互能力,也没有逻辑基础做输入校验。
  • 函数调用漏写执行括号:carpark内的response = catch_error_yn是将函数对象本身赋值给变量,而非执行函数拿到返回值,最终打印的是函数的内存地址,根本不是有效选择结果。
  • 异常捕获逻辑完全空转:原try块内没有任何会触发ValueError的操作,也没有编写“判断输入是否合法”的逻辑,用来提示错误的except分支永远不会被执行。
  • 基础语法阻断程序运行:开头的欢迎语、票价提示的字符串直接在双引号内换行,Python解析时会直接抛出SyntaxError,程序从启动阶段就无法正常运行。
对应修复逻辑
  • 在catch_error_yn的循环内加入input()获取用户输入,补充合法性判断:仅当输入严格匹配首字母大写的"Yes"/"No"时,才退出循环并返回结果,否则提示重新输入。
  • 调用catch_error_yn时补全括号,确保函数实际执行并返回有效结果。
  • 将需要多行展示的提示字符串换成三引号包裹,解决双引号内换行的语法报错问题。
  • 原逻辑里硬套ValueError捕获的写法不适用于字符串输入校验,直接通过条件判断筛选不合法输入即可,不需要冗余的异常捕获结构。
修复后可运行代码
def catch_error_yn():
    unvalid = True
    valid_options = ["Yes", "No"]
    while unvalid:
        response = input("")
        if response in valid_options:
            unvalid = False
            return response
        print("请只输入首字母大写的'Yes'或'No':")

def carpark():
    print("是否需要免费停车位?请回答首字母大写的'Yes'或'No'")
    response = catch_error_yn()
    print(f"您的停车选择为:{response}")

# 用三引号处理多行字符串,避免语法错误
print("""欢迎来到Copington冒险主题公园自动售票系统
按任意键查看票价。""")
enter = input()
print("""
成人票每张20英镑
儿童票每张12英镑
老年票每张11英镑""")
carpark()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 04:06:08