Python函数返回值异常求助:加载默认值函数未正确返回参数
问题分析与修复方案
Hey Andy,我帮你找到了代码里的两个关键问题,咱们一个个拆解:
1. 最核心的错误:lower方法没调用
你写的choice = input().lower是把lower这个方法本身赋值给了choice,而不是把输入的字符串转成小写。正确的写法必须是choice = input().lower()——加个括号才会执行这个方法,返回小写的输入字符串。
如果不加括号,choice是一个函数对象,永远不可能匹配yes或no集合里的字符串,哪怕你输入y也进不了对应的分支,函数最后会默认返回None,后续用这些值的函数自然会报错说输入无效。
2. 缺少其他分支的返回逻辑
你的函数只处理了用户输入yes的情况,当用户选no或者输入了乱七八糟的内容时,函数没有返回任何值,还是会返回None。这时候后续函数拿到None当参数,肯定出问题。
我给你改了代码,补充了这些逻辑,还加了循环处理无效输入的情况:
import sys def load_default(question): yes = {"y", "yes"} no = {"n", "no"} while True: # 循环直到用户输入有效选项 sys.stdout.write(question) choice = input().lower() # 修复:调用lower方法 if choice in yes: S0 = 40 K = 50 r = 0.1 sigma = 0.1 T = 10 return S0, K, r, sigma, T elif choice in no: # 手动输入分支,加了输入验证确保是数字 try: S0 = float(input("请输入S0的值: ")) K = float(input("请输入K的值: ")) r = float(input("请输入r的值: ")) sigma = float(input("请输入sigma的值: ")) T = float(input("请输入T的值: ")) return S0, K, r, sigma, T except ValueError: print("输入无效,请输入数字!") else: print("请输入Y/N或yes/no!") # 调用函数并接收参数 params = load_default("Load default values (Y) or insert new ones manually (N)?") # 后续可以这样传给其他函数: # your_other_function(*params)
修复后的亮点:
- 解决了
lower方法未调用的问题,确保输入能正确匹配选项 - 用循环处理无效输入,用户输错了会提示重新输入
- 手动输入分支加了
try-except,防止用户输入非数字导致崩溃 - 无论用户选默认还是手动输入,都会返回有效的参数值,不会出现
None的情况
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

