TypeError: 必须是字符串,而不是datetime.timed

2024-04-29 00:47:33 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码,第一次打印很好,给我这个错误 类型错误:必须是str,而不是datetime.timedelta

import datetime
hour = datetime.datetime.now().hour
tomorrow = datetime.datetime.now()
for i in range(50):
    hour += 1
    print(hour)
    if hour >= 23:
        tomorrow = tomorrow + datetime.timedelta(days=1)
        tomorrow = tomorrow.strftime('%d/%m/%Y')
        hour = 9
        print (tomorrow)

输出如下:

13
14
15
16
17
18
19
20
21
22
23
07/12/2017
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Traceback (most recent call last):
  File "C:\Users\hamza.salhi\Desktop\datetime test.py", line 8, in <module>
    tomorrow = tomorrow + datetime.timedelta(days=1)
TypeError: must be str, not datetime.timedelta

请有人告诉我为什么一开始它工作得很好,然后我得到那个错误


Tags: 代码inimport类型fordatetime错误range
2条回答

它第一次工作是因为tomorrow是一个datetime.datetime实例,然后:

tomorrow = datetime.datetime.now()

但是,在第一次之后,用字符串替换tomorrow

tomorrow = tomorrow.strftime('%d/%m/%Y')

不能将timedelta()对象添加到字符串。不要重新绑定tomorrow。将字符串指定给其他名称,或仅格式化要打印的对象(而不将其指定给名称):

if hour >= 23:
    tomorrow = tomorrow + datetime.timedelta(days=1)
    tomorrow_formatted = tomorrow.strftime('%d/%m/%Y')
    hour = 9
    print(tomorrow_formatted)  # different name
    print(tomorrow.strftime('%d/%m/%Y'))  # print the `strftime()` result

tomorrow = tomorrow.strftime('%d/%m/%Y') 将明天的类型更改为string,因此无法将其添加到datetime.timedelta。

而不是:

tomorrow = tomorrow + datetime.timedelta(days=1)
tomorrow = tomorrow.strftime('%d/%m/%Y')
...
print (tomorrow)

尝试:

tomorrow = tomorrow + datetime.timedelta(days=1)
...
print('{:%d/%m/%Y}'.format(tomorrow))

相关问题 更多 >