小编ami*_*ito的帖子

Python日志格式化程序中的部分字符串格式

我正在寻找一种在Python日志格式化程序中执行部分字符串格式化的方法.

尝试按以下方式定义格式化程序时:

formatter = logging.Formatter('[num-%d] %(levelname)s %(message)s' % (num,))

我会得到一个带有"格式需要映射"的TypeError,这是合理的,因为解释器找不到'levelname'和'message'.

当然,我希望'levelname'和'message'保持未格式化以便日志框架处理.

正如我所看到的,还有另外两种方法可以解决这个问题:

  1. format = '[num-' + str(num) + '] %(levelname)s %(message)s' % (num,)
  2. format = '[num-%(num)d] %(levelname)s %(message)s' % dict(num=num, levelname='%(levelname)s', message='%(message)s')

但是,我发现这两种解决方案都有些难看,我相信必须有一种更好的方法来格式化部分字符串 - 无论是在Python中,还是在python内置日志框架中使用.

有任何想法吗?

python string mapping logging formatter

5
推荐指数
1
解决办法
1665
查看次数

Python:检查对象是否不是"数组类型"

我正在寻找一种方式来测试对象是否是一个"名单十岁上下"式的不行,那就是-不仅该对象不是可迭代(例如-你也可以运行ITER上的绳子,或简单实现iter的对象)但该对象不在列表系列中.我将" list "系列定义为list/tuple/set/frozenset,或者从那些继承的东西,但是 - 因为可能有一些我缺少的东西,我想找到一种更通用的方式而不是isinstance针对所有的那些类型.

我想到了两种可行的方法,但是它们看起来有点尴尬,因为它们针对每种可能的列表类型进行了很多测试,而我正在寻找更通用的解决方案.

第一种选择:

return not isinstance( value, (frozenset, list, set, tuple,) )
Run Code Online (Sandbox Code Playgroud)

第二种选择:

return not hasattr(value, '__iter__')
Run Code Online (Sandbox Code Playgroud)

是否__iter__足够测试该属性?有没有更好的方法来查找对象是否不是列表类型?

提前致谢.

编辑:

(引自对@Rosh Oxymoron的解决方案的评论):
现在更好地考虑定义,我认为我更需要在定义中找到不是数组类型的所有内容,但它仍然可以是字符串/其他简单的对象... 对于实现该方法的对象,
检查collections.Iterable仍然会给我True__iter__.

python arrays iterable list

5
推荐指数
1
解决办法
8922
查看次数

标签 统计

python ×2

arrays ×1

formatter ×1

iterable ×1

list ×1

logging ×1

mapping ×1

string ×1