Python使用humanize.naturaldelta传minimum_unit参数报TypeError的解决
需求与问题复现
我需要输出两个日期之间的近似时间差,此前见过StackOverflow上高热度的timedelta字符串格式化方案,本可借助这些方案实现需求,但更偏好humanize库的简洁实现方式。
实际调用时按官方文档说明,给naturaldelta方法传入minimum_unit关键字参数时,程序抛出TypeError报错,复现代码如下:
import datetime as dt import humanize as hum d1 = dt.datetime(2003, 3, 17) d2 = dt.datetime(2007, 9, 21) hum.naturaldelta(d2 - d1, minimum_unit="days")
报错信息:
TypeError Traceback (most recent call last) <ipython-input-49-238c3a390a42> in <module>() 3 d1=dt.datetime(2003,3,17) 4 d2=dt.datetime(2007,9,21) ----> 5 hum.naturaldelta(d2-d1, minimum_unit="days") TypeError: naturaldelta() got an unexpected keyword argument 'minimum_unit'
已尝试的无效方案
我曾尝试传入months=True参数,但该参数仅能在时间差不足一年时强制以月为单位返回结果,无法满足需求。
运行环境
- 平台:Google Colab
- Python版本:3.7.10 (default, Feb 20 2021, 21:17:23) [GCC 7.5.0]
问题原因
经社区用户MrFuppes提示后才意识到此前的排查方向有误,报错核心原因是环境中预装的humanize为0.x旧版本,而当前官方稳定版本为3.x,旧版本的naturaldelta方法不支持minimum_unit参数。
解决方案
- 首先通过
pip list命令核查当前humanize的版本信息,确认是旧版本后,执行升级命令:pip install humanize --upgrade - 升级完成后,即可正常使用带
minimum_unit参数的naturaldelta方法,也可使用文档中提及的precisedelta方法实现需求。
内容的提问来源于stack exchange,提问作者Maxim Moloshenko
相关产品推荐
相关产品推荐

