微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

__str__ 的列表或元组显示日期时间的 __repr__ 因此它不可读

如何解决__str__ 的列表或元组显示日期时间的 __repr__ 因此它不可读

我对 Python 很陌生。 我正在开发一个使用 Datetime 对象列表的应用程序(来自 datetime 模块)。

我想调试我的应用程序,所以我打印(或记录)这些列表,但它返回给我:

>>> print(list_with_datetimes_and_timedeltas) # print calls __str__ (by default),but list's __str__ calls the item's __repr__
[(None,1,datetime.datetime(2020,11,18,44,12,tzinfo=datetime.timezone(datetime.timedelta(seconds=3600),'Paris,Madrid'))),(datetime.timedelta(seconds=110,microseconds=7),46,2,(datetime.timedelta(seconds=103,microseconds=5),1) .....

这是不可读的,这是由于列表的事实。str() 返回每个项目的 repr(根据我的理解)。

Datetimes 和 timedeltas 的 str 没有问题:

>>> print(my_list_with_datetimes_and_timedeltas[0][2])
2020-11-01 18:44:12+01:00 #which is what I would like in the list for the datetimes
>>> print(my_list_with_datetimes_and_timedeltas[1][0])
0:01:50.000007 #which is what I would like in the list for the timedeltas

我想过多种解决方案,但我真的不知道如何选择,甚至不知道它们是否可行:

  • 更改内置列表行为,使其返回项目的 __str__ 表示而不是它们的 __repr__,因为我真的不明白为什么如果我调用 __repr__ 它会返回对象的 __str__ {1}} 列在一个列表中(但这似乎不是一个好主意,我什至不知道它是否可行)
  • 更改 Datetime 模块中 Datetime 对象的内置 __repr__(也确实似乎不是一个好主意)
  • as Dan said here,我可以print([str(item) for item in mylist]),但是每次打印 List 时,我都必须对每个日志的每一行执行此操作(它甚至在这里不起作用,因为它是元组
  • 我也使用 Logger(来自日志记录)。如果我在那里改变一些东西会有帮助吗?

你有什么解决办法吗? (以及当我们在列表上调用 str 时 Python 选择它的原因,它显示项目的 repr?)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。