Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  2 6484

Kode

def showtime(FooBar=None):
 print(FooBar)
 if FooBar == "now" or FooBar == None or FooBar == "NoneType":
  timx = datetime.datetime.now()
  timz = timx.strftime("%Y%m%d%H%M%S")
 else:
  timx = datetime.datetime.now()
  timz = timx + timedelta(FooBar)
 print(timz)

Kode

showtime("hours=5")
Dette feiler fordi "FooBar" er en string hentet fra showtime(herfra). Dersom jeg legger inn hours=5 i selve funksjonen, fungerer dette fint.

Målet er å ha en fleksibel output av tidspunkt i en funksjon alene.
Sitat av Error
TypeError: unsupported type for timedelta hours component: str
Vis hele sitatet...
Tipper jeg ikke trenger å forklare hva jeg lurer på
Sist endret av RogerThat; 4. januar 2021 kl. 13:37.
Grunnen til at du får TypeError er fordi du sender en string til en funksjon som forventer en int. Hvis du kaller timedelta("5") får du TypeError. Hvis du kaller timedelta(5) så legger den til fem dager. Hvis du vil at funksjonen skal legge til timer får du si

Kode

timz = timx + timedelta(hours=FooBar)
Ellers kan jeg anbefale å sjekke python codestyle, og terminalverktøyet pycodestyle. Python er veldig lettleselig hvis det skrives riktig
Litt usikker på om jeg tolker deg riktig. Men her er en måte å gjøre det på:

Kode

import datetime

def showtime(delta_dict={}):
    timx = datetime.datetime.now()
    timz = timx + datetime.timedelta(**delta_dict)
    return timz.strftime("%Y%m%d%H%M%S")

print(showtime({"days":4})) 
print(showtime({"days":365}))

delta = {}
delta["hours"] = 3

print(showtime(delta))
Dette gir output:

Kode

20210108162957
20220104162957
20210104192957
Denne funksjonen tar imot en dict, og forventer at det ikke er noe andre keys enn "days", "hours" osv. Den blir så unpacka med ** i timedeltafunksjonen.