【发布时间】:2021-07-30 12:50:32
【问题描述】:
我创建了一个函数来从用户那里获取日期并使用strptime 将其转换为datetime 格式。该函数称为Obtaindate()。这将作为另一个函数Getdata() 的输入。现在,在第二个函数Getdata() 中,我需要用timedelta 从Obtaindate() 中减去日期。但我收到错误TypeError: unsupported operand type(s) for -: 'NoneType' and 'datetime.timedelta'。
我应该怎么做才能从第一个函数中获取日期以在第二个函数中工作?
这是代码示例:
def ObtainDate():
isValid=False
while not isValid:
userin = str(input("Type Date ddmmyy: "))
try:
dt = datetime.datetime.strptime(userin, '%d%m%y')
print('You have selected {}'.format(datetime.date.strftime(dt, '%d-%b-%Y')))
break
except:
print("Incorrect format...try again!")
continue
return dt
ObtainDate()
def Getdata():
date1 = ObtainDate() - datetime.timedelta(1)
date2 = datetime.datetime.today()
delta = datetime.timedelta(1)
while date1 < date2:
print('Download in progress...')
【问题讨论】:
-
你是否从第一个函数返回了一个值?看起来它正在返回
None。 -
在
Obtaindate函数中,使用return dt而不是break。由于您的代码是在示例中编写的,因此将永远不会达到返回值,因为它位于 之后continue。因此,该函数返回None,因为您只中断了 while 循环而不返回任何内容。 -
跑题了,但a bare
exceptis bad practice,尤其是在多行try-block 上。相反,请使用您期望的特定异常,例如except ValueError,或至少except Exception,并使用else-block 让代码在未发生异常时运行。 -
return dt的缩进量是应有的两倍。投票结束为错字。 -
@wjandrea jup,就可读性而言,我认为最好使用
else: return dt。
标签: python function datetime typeerror