You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 07:45:04