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
相关产品推荐
相关产品推荐

