如何将函数返回值作为另一函数参数传递?解决TypeError报错
函数返回值传递及代码报错解决
我搞不懂怎么把一个函数的返回值作为另一个函数的参数传递,搜了很多相关帖子都没找到解决方案。我的代码还有问题,首先得解决报错的问题。
需求说明
- 创建无参数函数,要求用户输入生日,验证输入格式后返回date对象;
- 创建接收date对象参数的函数,根据出生年份与当前年份计算用户年龄。
现有代码
import datetime as dt # 原代码遗漏了必要的导入语句 def func1(): bd = input("When is your birthday? ") try: dt.datetime.strptime(bd, "%m/%d/%Y") except ValueError as e: print("There is a ValueError. Please format as MM/DD/YYY") except Exception as e: print(e) return bd def func2(bd): today = dt.datetime.today() age = today.year - bd.year return age
报错信息
TypeError: func2() missing 1 required positional argument: 'bday'
已尝试的方法
- 将func1赋值给变量,再将该变量作为func2的参数传递;
- 在func2内部调用func1;
- 在func2内部定义func1的内容。
解决方案
你的代码存在两个核心问题,同时调用方式也需要调整:
1. 核心问题分析
- func1没有返回date对象:你在
try块中调用了dt.datetime.strptime解析日期,但未保存解析后的datetime对象,最终返回的是用户输入的原始字符串,这会导致func2无法访问bd.year属性; - 调用方式错误:当前报错大概率是调用func2时未正确传递参数(比如直接调用
func2()没传参,或参数名写错)。
2. 修复后的完整代码
import datetime as dt def func1(): while True: bd_input = input("请输入你的生日(格式:MM/DD/YYYY):") try: # 解析为datetime对象并返回 birthday = dt.datetime.strptime(bd_input, "%m/%d/%Y") return birthday except ValueError: print("格式错误,请按照MM/DD/YYYY的格式重新输入") except Exception as e: print(f"出现错误:{e}") def func2(birthday): today = dt.datetime.today() # 优化年龄计算:考虑生日是否已过当年 age = today.year - birthday.year if (today.month, today.day) < (birthday.month, birthday.day): age -= 1 return age # 正确传递参数的方式:将func1的返回值作为func2的参数 user_age = func2(func1()) print(f"你的年龄是:{user_age}") # 也可以用变量中转的方式 # user_birthday = func1() # user_age = func2(user_birthday) # print(f"你的年龄是:{user_age}")
关键修复点
- func1新增循环逻辑,确保用户输入正确格式的日期才退出,同时返回解析后的datetime对象;
- func2优化年龄计算逻辑,避免出现“未到生日却多算一岁”的问题;
- 通过
func2(func1())直接将func1的返回值传递给func2,或用变量中转,确保参数传递正确。
内容的提问来源于stack exchange,提问作者giovanni
相关产品推荐
相关产品推荐

