Python - datetime.time() 比较 returns AttributeError 作为 'str' 对象

Python - datetime.time() comparison returns AttributeError as 'str' object

我正在尝试将列表中的日期时间对象与常量日期时间进行比较,但我总是被返回 AttributeError: 'str' object has no attribute 'time'

榜单: hetero_lst = [datetime.datetime(2021, 2, 8, 6, 45), 'Meeting 1', '45 mins', datetime.datetime(2021, 2, 8, 7, 15), 'Meeting 2', '45 mins', datetime.datetime(2021, 2, 8, 12, 0), 'Meeting 3', '30 mins']

以下...

for element in hetero_lst:
    print(type(element))

...returns:

<class 'datetime.datetime'>
<class 'str'>
<class 'str'>
<class 'datetime.datetime'>
<class 'str'>
<class 'str'>
<class 'datetime.datetime'>
<class 'str'>
<class 'str'>

这是我在行 if t2.time() < t1:

上收到 AttributeError 的时间
t1 = time(hour=10,minute=0,second=0)

for i in reversed(range(len(hetero_lst))):
    t2 = hetero_lst[i]

    if t2.time() < t1:
        print("Deleted item {}".format(t2))
        del t2
    else:
        pass

我真的不明白。有人可以帮忙吗?

你得到这个错误是因为你试图调用一个属性(在本例中是一个方法).time() 在你的列表中类型为 [=18= 的项目上]str,而 str-objects 没有任何名为 .time() 的属性。为了避免这种情况,您可以首先使用方法 isinstance(t2, datetime) 检查列表中的当前变量是否为 datetime 类型,如果是,则进行其他检查。

from datetime import datetime, time

lst = [datetime(2021, 2, 8, 6, 45), 'Meeting 1', '45 mins', datetime(2021, 2, 8, 7, 15), 'Meeting 2', '45 mins', datetime(2021, 2, 8, 12, 0), 'Meeting 3', '30 mins']

t1 = time(hour=10,minute=0,second=0)

for i in reversed(range(len(lst))):
    t2 = lst[i]
    if isinstance(t2, datetime) and t2.time() < t1:
        print("Deleted item {}".format(t2))
        del t2
    else:
        pass

:循环中的代码不会更改列表。 del t2 唯一做的就是删除对与 lst[i] 相同的内存地址的引用。如果你真的想删除列表中的那个项目,你必须通过调用 del lst[i] 来完成。否则,如果您在上面的 for 循环之后打印列表,您将看到没有任何项目被删除。

一种更有效的编写 for 循环的方法如下所示:

for i, possible_datetime_item in enumerate(lst):
    if isinstance(item, possible_datetime_item) and item.time() < t1:
        print("Deleted item {}".format(possible_datetime_item))
        del lst[i]