Python中如何在另一函数中使用函数输出完成日期运算并解决NoneType报错
代码报错的核心修复方案
根本问题定位
- 函数返回值逻辑失效:原
ObtainDate()函数内的return dt语句放置在except分支的continue语句之后,该位置的代码永远不会被执行:- 用户输入合法时,
try块执行到break直接跳出循环,函数没有显式返回值,Python会默认返回None - 用户输入非法时,
except分支执行continue直接进入下一轮输入校验,后续的return dt完全没有执行机会
- 用户输入合法时,
- 冗余无效标记:定义的
isValid变量全程没有被赋值修改,属于无作用的占位代码,不影响执行但会让逻辑变混乱。 - 附带逻辑漏洞:
Getdata()内的循环没有更新日期变量,就算返回值问题修复,也会触发无限循环。
修正后的可运行代码
import datetime def ObtainDate(): while True: userin = str(input("Type Date ddmmyy: ")) try: # 解析合法日期 dt = datetime.datetime.strptime(userin, '%d%m%y') print('You have selected {}'.format(datetime.date.strftime(dt, '%d-%b-%Y'))) # 拿到合法日期后直接返回,替代之前的break逻辑 return dt except: print("Incorrect format...try again!") continue def Getdata(): # 现在ObtainDate()返回的是正常的datetime对象,可以直接做timedelta运算 date1 = ObtainDate() - datetime.timedelta(1) date2 = datetime.datetime.today() while date1 < date2: print('Download in progress...') # 每次循环后更新日期,避免无限循环 date1 += datetime.timedelta(1) # 触发执行 Getdata()
关键校验点
- 跨函数传递值时,要确认目标函数在所有正常分支上都有对应返回值,不要只靠break跳出循环却不传递解析好的结果
- 日期运算时要确保拿到的变量是datetime类型,而非默认的None值。
内容的提问来源于stack exchange,提问作者Rockoos
相关产品推荐
相关产品推荐

