问题描述
我对 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 (将#修改为@)