gpt4 book ai didi

python - 将日期时间对象传递给 str.format() 时出现意外结果

转载 作者:行者123 更新时间:2023-11-28 19:43:17 25 4
gpt4 key购买 nike

在 Python 2.7 中,str.format()接受非字符串参数并调用 __str__格式化输出前值的方法:

class Test:
def __str__(self):
return 'test'

t = Test()
str(t) # output: 'test'
repr(t) # output: '__main__.Test instance at 0x...'

'{0: <5}'.format(t) # output: 'test ' in python 2.7 and TypeError in python3
'{0: <5}'.format('a') # output: 'a '
'{0: <5}'.format(None) # output: 'None ' in python 2.7 and TypeError in python3
'{0: <5}'.format([]) # output: '[] ' in python 2.7 and TypeError in python3

但是当我通过 datetime.time对象,我得到 ' <5'作为 Python 2.7 和 Python 3 的输出:

from datetime import time
'{0: <5}'.format(time(10,10)) # output: ' <5'

传递 datetime.time反对 str.format()应该提高 TypeError或格式 str(datetime.time) ,而是返回格式化指令。这是为什么?

最佳答案

'{0: <5}'.format(time(10, 10))结果调用 time(10, 10).__format__ ,返回 <5对于 <5格式说明符:

In [26]: time(10, 10).__format__(' <5')
Out[26]: ' <5'

发生这种情况是因为 time_instance.__format__ 尝试格式化 time_instance使用 time.strftime time.strftime不理解格式化指令。

In [29]: time(10, 10).strftime(' <5')
Out[29]: ' <5'

!s转换标志会告诉 str.format调用strtime 上呈现结果之前的实例 - 它将调用 str(time(10, 10)).__format__(' <5') :

In [30]: '{0!s: <5}'.format(time(10, 10))
Out[30]: '10:10:00'

关于python - 将日期时间对象传递给 str.format() 时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34589607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com