【发布时间】:2017-08-21 14:18:12
【问题描述】:
我正在尝试遵循 Django Unleashed 的代码,但偶尔(我的意思是经常)我无法完全理解代码。这是一个假设在未发送特定邮件时记录错误的函数的示例。它是登录系统的一部分。
def log_mail_error(self, **kwargs):
msg_list = [
'Activation email did not send.\n',
'from_email: {from_email}\n'
'subject: {subject}\n'
'message: {message}\n',
]
recipient_list = kwargs.get(
'recipient_list', [])
for recipient in recipient_list:
msg_list.insert(
1, 'recipient: {r}\n'.format(
r=recipient))
if 'error' in kwargs:
level = ERROR
error_msg = (
'error: {0.__class__.__name__}\n'
'args: {0.args}\n')
error_info = error_msg.format(
kwargs['error'])
msg_list.insert(1, error_info)
else:
level = CRITICAL
msg = ''.join(msg_list).format(**kwargs)
logger.log(level, msg)
我有一个角色很难过:
error_msg = (
'error: {0.__class__.__name__}\n'
'args: {0.args}\n')
error_info = error_msg.format(
kwargs['error'])
我根本看不出这个 0.class.name 是从哪里来的。零假设是什么意思?项目中没有称为零的对象或类。我也不太了解error_msg的格式。可能我有两个带有 {} {} 的字段,我可以在其中放置“kwargs ['error']”,但我只有一个值可以放入两个位置进行字符串格式化。但是,如果它只是一个占位符,为什么要使用 {0.__class [...]} 痛苦?发生了一些我不太明白的事情。有人可以帮忙吗?
【问题讨论】:
标签: python django django-logging