Python 中 TypeError: ‘datetime.datetime’ object is not callable 错误
当我们覆盖 datetime
模块中的内置类或方法时,会出现 Python“TypeError: ‘datetime.datetime’ object is not callable”。 要解决该错误,需要解决变量和内置类之间的名称冲突。
下面是一个产生上述错误的示例代码
from datetime import datetime, date
# 👇️ override built-in date() class by mistake
date = datetime.today()
result = date(2022, 9, 24)
# ⛔️ TypeError: 'datetime.datetime' object is not callable
print(result)
我们通过将其设置为日期时间对象来隐藏内置日期类,并尝试将其作为函数调用。
但是,现在
date
变量存储的是datetime
对象,而不是内置类。
要解决该错误,需要确保不要覆盖 datetime
模块中的任何内置方法和类。
from datetime import datetime, date
# ✅ Renamed variable
my_date = datetime.today()
result = date(2022, 9, 24)
print(result) # 👉️ "2022-09-24"
重命名变量应该可以解决问题。
该错误的另一个常见原因是试图将日期时间对象当作函数来调用。
from datetime import datetime
my_date = datetime.today()
# ⛔️ TypeError: 'datetime.datetime' object is not callable
my_date() # 👈️ remove extra set of parentheses
要解决该错误,我们必须弄清楚如何为变量分配日期时间对象而不是函数或类,或者删除额外的括号集。
from datetime import datetime, date
my_date = datetime.today()
print(my_date) # 👉️ "2022-12-29 14:52:21.292423"
当我们打算访问对象的属性时,可能会错误地尝试调用 datetime
对象。
开始调试的最佳方法是调用 dir()
函数,将导入的模块传递给它。
from datetime import datetime
# 👇️ [...'astimezone', 'combine', 'ctime', 'date', 'day',
# 'dst', 'fold', 'fromisocalendar', 'fromisoformat',
# 'fromordinal', 'fromtimestamp', 'hour', 'isocalendar',... ]
print(dir(datetime))
如果将模块对象传递给 dir()
函数,它会返回模块属性名称的列表。
我们可以使用点表示法来访问日期时间对象支持的任何属性。
from datetime import datetime
d = datetime(2022, 11, 24, 9, 30, 0)
# 👇️ 24/11/22
print(d.strftime("%d/%m/%y"))
print(d.year) # 👉️ 2022
print(d.month) # 👉️ 11
或者,如果我们不打算访问属性,则可以删除方括号。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。