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

Python:类方法返回值传递异常,get_past_date为何返回None?

问题分析与解决方案

核心问题排查

你遇到的调用engine.date.get_past_date(90)返回None的情况,大概率是**return语句缩进错误**——如果return (month, day, year)没有被包含在get_past_date方法的代码块内(缩进层级不对),方法会默认返回None。请检查实际代码,确保return与方法内其他代码处于同一缩进层级。

另外,你通过字符串解析提取日期字段的方式过于繁琐,既容易出错也没必要,可以直接通过datetime对象的属性或格式化方法获取月、日、年,同时避免字符串解析的潜在问题。

修正后的Date类get_past_date方法

import datetime

class Date:
    def get_past_date(self, days_in_past):
        # 直接获取当前日期,比多次调用now()更可靠
        start_date = datetime.date.today()
        # 计算指定天数前的日期
        past_date = start_date - datetime.timedelta(days=days_in_past)
        
        # 直接从日期对象提取字段,转字符串保证格式统一
        month = str(past_date.month)
        day = str(past_date.day)
        year = str(past_date.year)
        
        return (month, day, year)

确保Engine类的实例初始化正确

要保证engine.date是Date类的有效实例,Engine类的初始化代码应类似:

class Engine:
    def __init__(self):
        self.date = Date()
        self.data = Data()

class Data:
    def extract_cem_spreadsheet_data(self, engine):
        past_date = engine.date.get_past_date(90)
        print(past_date)  # 现在可正确返回(月, 日, 年)格式的元组

额外优化建议

如果需要固定长度的日期格式(比如两位月份/日期,如"09"而非"9"),可以用strftime方法格式化:

month = past_date.strftime("%m")
day = past_date.strftime("%d")
year = past_date.strftime("%Y")

内容的提问来源于stack exchange,提问作者Phillip England

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:25:20