【问题标题】:'datetime.datetime' object is not subscriptable'datetime.datetime' 对象不可下标
【发布时间】:2016-08-26 23:15:00
【问题描述】:

我已经检查了所有其他关于此的帖子,但没有一个可以解决我的问题。

我创建了一个包含带有 id 和 datetime 对象的元组的列表。每次我尝试清理列表时: last_encounters = [item for item in last_encounters if item[1] < datetime.utcnow] 我收到'datetime.datetime' object is not subscriptable 的错误。越来越烦人了,我试过 dicts.. 没用。

还测试了项目[1],根据我的打印,它是一个日期时间。

即使尝试将其更改为 (x,y) for x,y in last_encounters if y < ... 也不起作用。

一些有用的代码:

list = []
d_t = datetime.utcfromtimestamp(9000000)     
list += [('lel', d_t)]     
list = [item for item in list if item[1] < datetime.utcnow]

我希望有人能告诉我我在这里做错了什么。

提前致谢,

凯文

【问题讨论】:

  • 您发布的代码根本不会产生您描述的错误:last_encounters 为空,因此列表 comp 仅返回一个空列表。请发帖minimal reproducible example
  • 我只添加了实际修改列表的代码。我假设它不会循环一个空列表?我打印了值,它根本不是空的。我向我展示了元组项中的值,其中第二个肯定是日期时间。
  • 在您发布的代码中,第一行将last_encounters 设置为一个空列表。如果这不是您的列表在达到列表理解时包含的内容,您需要发布 that
  • 那是我初始化列表的地方。我将更改顺序,因为它不是按照这个特定的顺序完成的。首先它创建列表。然后它添加它,然后循环遍历它,给出错误。

标签: python python-2.7 datetime tuples


【解决方案1】:

当您执行last_encounters += (a, b) 时,您将两个序列相加,last_encounters(a,b)。这意味着您最终会将ab 卡在列表末尾,而不是仅仅将元组添加到列表中。

有两种方法可以解决您的问题:

  1. 添加一个包含你的元组的序列:

     last_encounters += [(d["id"], d["d_t"])]
    
  2. 或者最好使用append 方法:

     last_encounters.append((d["id"], d["d_t"]))
    

【讨论】:

  • 呃,就是这样。非常感谢!
【解决方案2】:

看起来您的问题是您将元组添加到列表的方式。这是一个显示问题的示例:

l = []
l += ("a", "b")
print l

l = []
l.append( ("a", "b"))
print l  

这给出了:

>>> ['a', 'b']
>>> [('a', 'b')]

所以list+=tuple 相当于调用list.extend(tuple) 而不是list.append(tuple),这正是你想要的。

关于引发的异常含义的旁注: X is not subscriptable 表示您正在尝试调用该语法 X[some int] 而对象不支持它。

【讨论】:

    【解决方案3】:

    尝试调用utcnow作为方法utcnow()

    last_encounters = [item for item in last_encounters if item[1] < datetime.utcnow()]
    

    我无法使用您的代码版本重现您的错误,但列表中包含项目的版本导致了此修复。

    【讨论】:

    • 我已经这样做了,现在它说:can't compare datetime.datetime to str ....奇数...
    • 我们需要查看您要清理的列表中的内容 - 您需要将其添加到您的问题描述中。听起来好像有字符串而不是日期时间。
    • 试图用 ideone 重现它。转载:ideone.com/uaDRDv
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2015-10-23
    • 2021-07-05
    • 1970-01-01
    • 2010-10-14
    • 2013-09-22
    相关资源
    最近更新 更多