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

Python报'datetime.date' object is not callable 跨年日期循环异常

问题根因

报错和函数重复调用无关,本质是变量名覆盖了导入的日期类:

  1. 代码开头通过from datetime import date导入了datetime模块的date类,allSundays函数内的date(year,1,1)本来是调用这个类生成日期对象。
  2. 完整代码最内层的打印循环使用date作为循环变量:for date in monthDatesList:。Python中for循环定义的变量不会在循环结束后销毁,会留在当前作用域(这段循环写在全局位置,所以变量会留在全局作用域)。跑完2020年全流程后,全局的date已经不是一开始导入的类,而是monthDatesList中最后一个datetime.date类型的实例对象。
  3. 处理2021年再次调用allSundays函数时,执行d = date(year, 1, 1)相当于尝试把一个日期实例当可调用对象执行,就会抛出TypeError: 'datetime.date' object is not callable错误。

精简代码可以正常运行的原因很直接:精简版遍历日期的循环变量命名为sundayDate,全程没有占用date这个标识符,导入的date类没有被覆盖,所以跨年执行也不会触发问题。

修复方案

只需要修改覆盖了date类的循环变量名即可,日常写代码也尽量不要用和导入类、内置函数同名的标识符当普通变量名,从根源避免这类覆盖问题:

# 把原代码最内层循环的变量名从date改成其他名字,比如report_date
for report_date in monthDatesList:
    print(report_date)

修改后全局的date会始终指向导入的日期类,不管处理多少年都不会触发同类报错。

内容的提问来源于stack exchange,提问作者lost three 6 dove

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:57:13