好的简单问题,请不要杀了我。
要记录列表的长度:
logger.info("the length of my list is: " + str(len(mylist)));
在python中有更好的方法吗?
答案 0 :(得分:8)
我会做这样的事情:
logger.info('the length of my list is: {0}'.format(len(mylist)))
修改:有关format
应该优于%
的原因的详细信息,请查看PEP 3101:
'%'运算符主要受限于它是a的事实 二元运算符,因此最多可以使用两个参数。 其中一个参数已经专门用于格式字符串, 将所有其他变量留在剩下的中 论点。目前的做法是使用字典或 元组作为第二个参数,但正如许多人所评论的那样 [3],这缺乏灵活性。 “全有或全无”的方法 (意思是必须在只有位置参数之间做出选择, 或者只有命名参数)被认为过度约束。
另请注意,您甚至可以将自己的自定义格式添加到对象中。因此,您不会限制一组已定义的转换字符,但您可以根据需要定义自己的迷你语言来格式化对象。这是%
无法提供的强大功能。
格式(值[,format_spec])
将值转换为“格式化”表示,由format_spec控制。 format_spec的解释取决于value参数的类型,但是大多数内置类型都使用标准格式化语法:Format Specification Mini-Language。
答案 1 :(得分:4)
您还可以执行以下操作:
logger.info('the length of my list is %d' % len(mylist))
答案 2 :(得分:1)
你也可以这样做:
logger.info('the length of my list is: %s', len(mylist))
只有在INFO
级别启用记录器时,才会执行替换。因此,这比在未启用记录器时记录消息之前在消息中进行替换稍快一些。
您还可以传递更多参数或dict
代替:
>>> logging.info('%s %s %s', 1,2,3)
INFO:root:1 2 3
>>> logging.info('%(foo)s %(bar)s', {'foo': 'FOO', 'bar': 'BAR'})
INFO:root:FOO BAR
logging
使用字符串格式化运算符。出于其他目的,format()
可能会更好。
答案 3 :(得分:0)
如果您要反复添加特定类型的信息,可以提供自定义格式并使用extra
关键字。
例如:
FORMAT = "'%(message)s' is long: %(length)d"
logging.basicConfig(format=FORMAT)
logger = logging.getLogger()
d = {'length': 30}
logger.info('my message', extra=d)
会给你类似的东西:
'my message' is long: 30