Python 类型错误:can';t将datetime.timedelta与float进行比较

Python 类型错误:can';t将datetime.timedelta与float进行比较,python,datetime,timedelta,Python,Datetime,Timedelta,我正在编写python脚本,以计算开始日期和结束日期格式之间的持续时间,如20140520160000和20140520170000,这样我就可以得到小时数 我在使用此代码时遇到问题: if epgDuration >= 0.10 and epgDuration <= 0.30: epgwidth = "250" 以下是我用来延长时间的代码: for row in programs: program_startdate = str(row[2]) progra

我正在编写python脚本,以计算开始日期和结束日期格式之间的持续时间,如
20140520160000
20140520170000
,这样我就可以得到小时数

我在使用此代码时遇到问题:

if epgDuration >= 0.10 and epgDuration <= 0.30:
   epgwidth = "250"
以下是我用来延长时间的代码:

for row in programs:
    program_startdate = str(row[2])
    program_endDate = str(row[3])

    try:
       start_date = datetime.datetime.strptime(program_startdate, "%Y%m%d%H%M%S")
       end_date = datetime.datetime.strptime(program_endDate, "%Y%m%d%H%M%S")
    except TypeError:
       start_date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(program_startdate, "%Y%m%d%H%M%S")))
       end_date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(program_endDate, "%Y%m%d%H%M%S")))

    #workout the duration times to get the program time
    epgDuration = end_date - start_date

    if epgDuration >= 0.10 and epgDuration <= 0.30:
       epgwidth = "250"

    elif epgDuration >= 1.00 and epgDuration <= 1.29:
         epgwidth = "500"
    print epgwidth
对于程序中的行:
程序_startdate=str(第[2]行)
程序_endDate=str(第[3]行)
尝试:
开始日期=datetime.datetime.strtime(程序开始日期,“%Y%m%d%H%m%S”)
end_date=datetime.datetime.StrTime(程序_endDate,“%Y%m%d%H%m%S”)
除类型错误外:
开始日期=datetime.datetime.fromtimestamp(time.mktime(time.strtime(程序开始日期,“%Y%m%d%H%m%S”))
end_date=datetime.datetime.fromtimestamp(time.mktime(time.strtime(程序的endDate,“%Y%m%d%H%m%S”))
#计算持续时间以获得计划时间
epgDuration=结束日期-开始日期

如果epgDuration>=0.10且epgDuration=1.00且epgDuration确实存在,则无法将
timedelta
与浮点值进行比较

可以将对象转换为秒:

if 600 <= epgDuration.total_seconds() <= 1800:

对于时差不在10-30分钟或1-1.5小时范围内的情况,我在
if
语句之前给出了
epgwidth
的默认值

要从
timedetla
对象获取分钟数,可以使用
total_seconds()
并除以60:

epgDurationMin = epgDuration.total_seconds()/60.
if 0.10 <= epgDurationMin <= 0.30:
   ...
epgDurationMin=epgDuration.total_seconds()/60。

if 0.10非常感谢,if语句之外的print epgwidth有问题。我得到一个错误
UnboundLocalError:赋值前引用的局部变量“epgwidth”
。我想得到if语句之外的变量来打印epgwidth。@user3757279:那么两个范围都不匹配;在这种情况下,您需要返回
epgwidth
的默认值。我不明白您的意思?我想在if语句之外打印epgwidth,那么我如何修复它呢?您的
epgDuration
值不适合这两个范围;例如,它可能有0.5分钟长。在这种情况下,未设置
epgwidth
。在
if
语句之前添加更多事例或指定默认值。我想检查epgDuration值是否在1.00和1.30之间,然后设置epgwidth值。你能帮我修复我得到的错误,允许我在if语句之外打印epgwidth吗?我已经尝试过了,但它不起作用。回答不好!你说的0.10分钟和0.30分钟是什么意思?我想你的意思是10分钟30分钟,而不是6秒18秒。@MartijnPieters是的,你是对的。您能帮助我如何在if语句之外使用
print epgwidth
吗?我更新了我的答案,以反映我认为您正试图实现的目标。如果你用这些细节更新了你的问题,这会有所帮助。
if 600 <= epgDuration.total_seconds() <= 1800:
epgwidth = "0"

if timedelta(minutes=10) <= epgDuration <= timedelta(minutes=30):
    epgwidth = "250"

elif timedelta(hours=1) <= epgDuration <= timedelta(hours=1.5):
    epgwidth = "500"
epgDurationMin = epgDuration.total_seconds()/60.
if 0.10 <= epgDurationMin <= 0.30:
   ...