当前位置: 首页 > 面试题库 >

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

卜方伟
2023-03-14
问题内容

我最近遇到了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                  '

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


问题答案:

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__明确拒绝格式字符串,以避免隐式字符串转换,特别是因为格式设置指令是特定于类型的。



 类似资料:
  • 这个网页让我相信我可以将一个空字符串传递给,以关闭图形的y记号。 但是,当我尝试这样做时,我得到以下错误: 怎么回事?如果这种关闭y型刻度的方法是不正确的,那么正确的方法是什么?

  • 我需要将excel中的日期单元格格式设置为dd/mm/yyyy 我很感激这可能不是“正确”的标准,但是,这是客户想要的。。。 我传入单元格的日期格式为yyyy-mm-dd 所以 我有这个代码: 根据这一点:http://www.kscodes.com/java/writing-various-date-formats-in-excel-using-poi/ (1) 我认为应该有效。但是当我创建ex

  • 我在行中发现了空字符串,并通过调试将其转换为。在google了一段时间后,我看到Grails中有一个特性,可以将web表单中的空字符串转换为空字符串以持久化,可以通过config.groovy中的配置禁用该特性。但我不认为斯波克UT是这样的。我试过了,但不像我想的那样有效。 我想知道为什么空字符串被转换为null作为传递给构造函数的参数?提前谢了。

  • 问题内容: 我正在尝试通过使用JSON格式的字符串初始化Javascript变量来加载数据表。如果我声明: 那么我的表将正确加载该行。 我尝试在脚本之前初始化Java字符串,然后将该对象传递给Javascript变量,如下所示: 我的表无法识别这一点,并且在尝试以这种方式传递行时无法加载该行。如何正确地将Java字符串传递给Javascript,以便我的表能够加载数据? 问题答案: 尝试使用引号。

  • 我在Kotlin中使用Gson将对象转换为json字符串。 var json2可以返回正确的结果,但是var json1返回null,为什么?

  • 问题内容: 这是以前有关Java中的String初始化的一些问题的后续问题。 在用Java进行了一些小测试之后,我面临以下问题: 为什么我可以执行此语句 当str2一个String对象初始化为,但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来? 顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_s