Python函数无法按预期返回目标日期对,寻求技术协助
问题解决:函数返回目标日期的修正方案
你的代码存在几个关键问题,导致无法返回预期日期,以下是问题点和修正后的代码:
主要问题点
- 函数最后返回
0,而非计算好的日期变量 - 未正确导入
datetime模块的子对象,直接使用date和timedelta会触发NameError - 变量引用顺序错误:
start_day计算时用到了未定义的last_day_of_prev_month - 未定义的
sf对象:sf.date_sub属于第三方库,但代码里没导入,改用原生datetime方法即可 - 函数参数
x、y无意义:函数内直接覆盖参数值,无需将其作为入参
修正后的代码
from datetime import date, timedelta def get_date(): # 获取当前日期 today = date.today() # 当月第一天 first_day_current = today.replace(day=1) # 上月最后一天 last_day_prev = first_day_current - timedelta(days=1) # 上月第一天 first_day_prev = last_day_prev.replace(day=1) # 转成字符串格式 today_str = today.strftime('%Y-%m-%d') first_day_current_str = first_day_current.strftime('%Y-%m-%d') first_day_prev_str = first_day_prev.strftime('%Y-%m-%d') last_day_prev_str = last_day_prev.strftime('%Y-%m-%d') # 昨天的日期字符串 yesterday_str = (today - timedelta(days=1)).strftime('%Y-%m-%d') if today_str == first_day_current_str: # 今天是当月第一天,返回上月的起止日期 return first_day_prev_str, last_day_prev_str else: # 否则返回当月第一天到昨天的日期 return first_day_current_str, yesterday_str # 调用示例 start, end = get_date() print(start, end)
修正说明
- 导入
date和timedelta:避免每次写datetime.date,简化代码 - 调整变量计算顺序:先计算上月最后一天,再用它得到上月第一天,解决变量未定义的问题
- 替换
sf相关方法:用原生timedelta计算昨天的日期,无需依赖第三方库 - 移除无用参数:函数不需要入参,直接内部计算后返回日期元组
- 修改返回值:返回计算好的两个日期字符串,而非
0
内容的提问来源于stack exchange,提问作者Vivian
相关产品推荐
相关产品推荐

