您的位置:首页技术文章
文章详情页

Python TypeError:传递给对象的非空格式字符串。__format__

浏览:3日期:2022-08-07 09:53:48
如何解决Python TypeError:传递给对象的非空格式字符串。__format__?

bytes对象没有自己的__format__方法,因此使用默认的from object:

>>> bytes.__format__ is object.__format__True>>> ’{:20}’.format(object())Traceback (most recent call last): File '<stdin>', line 1, in <module>TypeError: non-empty format string passed to object.__format__

这只是意味着您不能在这些格式上使用简单,无格式,未对齐的格式。显式转换为字符串对象(就像通过解码bytes到一样str)以获取格式规范支持。

您可以使用!s字符串转换使转换明确:

>>> ’{!s:20s}’.format(b'Hi')'b’Hi’ '>>> ’{!s:20s}’.format(object())’<object object at 0x1100b9080>’

object.__format__明确拒绝格式字符串,以避免隐式字符串转换,特别是因为格式设置指令是特定于类型的。

解决方法

我最近遇到了TypeError异常,发现它很难调试。我最终将其简化为这个小测试用例:

>>> '{:20}'.format(b'hi')Traceback (most recent call last): File '<stdin>',line 1,in <module>TypeError: non-empty format string passed to object.__format__

无论如何,这对我来说不是很明显。我的代码的解决方法是将字节字符串解码为unicode:

>>> '{:20}'.format(b'hi'.decode('ascii')) ’hi ’

此异常的含义是什么?有没有一种方法可以使它更清晰?

标签: Python 编程
相关文章: