__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 (将#修改为@)