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]
我正在尝试将列表中的日期时间对象与常量日期时间进行比较,但我总是被返回 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:
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]