将列表的长度作为字符串

时间:2012-02-03 23:30:38

标签: python list logging

好的简单问题,请不要杀了我。

要记录列表的长度:

logger.info("the length of my list is: " + str(len(mylist)));

在python中有更好的方法吗?

4 个答案:

答案 0 :(得分:8)

我会做这样的事情:

logger.info('the length of my list is: {0}'.format(len(mylist)))

修改:有关format应该优于%的原因的详细信息,请查看PEP 3101

  

'%'运算符主要受限于它是a的事实   二元运算符,因此最多可以使用两个参数。   其中一个参数已经专门用于格式字符串,   将所有其他变量留在剩下的中   论点。目前的做法是使用字典或   元组作为第二个参数,但正如许多人所评论的那样   [3],这缺乏灵活性。 “全有或全无”的方法   (意思是必须在只有位置参数之间做出选择,   或者只有命名参数)被认为过度约束。

另请注意,您甚至可以将自己的自定义格式添加到对象中。因此,您不会限制一组已定义的转换字符,但您可以根据需要定义自己的迷你语言来格式化对象。这是%无法提供的强大功能。

正如documentation

中所述
  

格式(值[,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