2017-12-06 12 views
0

hier ist mein Code funktioniert es für den ersten Druck in Ordnung und das gibt mir diesen Fehler Typeerror: str werden müssen, nicht datetime.timedeltaTypeerror: muss str werden, nicht 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) 

hier die Ausgabe:

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 

bitte kann mir jemand sagen, warum es anfangs gut funktioniert dann bekomme ich, dass Fehler

Antwort

0

es funktioniert das erste Mal, weil tomorrow dann ist ein datetime.datetime Beispiel:

tomorrow = datetime.datetime.now() 

jedoch nach dem ersten Mal, Sie tomorrow mit einem String ersetzen:

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

Sie können keine timedelta() Objekt in eine Zeichenfolge hinzuzufügen. Nicht erneut binden tomorrow. Ordnen Sie entweder die Zeichenfolge zu einem anderen Namen oder nur formatiert werden, das Objekt für den Druck (und nicht abtreten es zu einem Namen überhaupt):

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 
+0

Ich würde gerne hören, was meine Antwort nicht hilfreich oder falsch ist, ein Downvote zu verdienen. So kann ich meine Antwort verbessern! –

0

tomorrow = tomorrow.strftime('%d/%m/%Y') ändert die Art von morgen zu bespannen, so kann es nicht zu datetime.timedelta hinzugefügt werden.

Statt tun:

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

Versuchen:

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