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
相关产品推荐
相关产品推荐

