gpt4 book ai didi

python - 为什么 Python 字符串格式会默默地忽略与类实例不匹配的参数计数?

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:37 26 4
gpt4 key购买 nike

通常,如果字符串中的占位符数量与传递的参数数量不匹配,Python 旧式字符串格式化会报错:

>>> 'no.placeholders.here' % 'test'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

但是,当传递的参数是用户定义类的实例时,它会默默地忽略它:

>>> class Test(object): pass
>>> 'no.placeholders.here' % Test()
'no.placeholders.here'

这种行为似乎不一致,并导致了一些难以追踪的错误。为什么格式参数的类型对于此错误很重要?

最佳答案

这正是 % 格式的原因

% 格式众所周知在参数处理方面的不一致会导致异常或不异常,具体取决于类型。只有两种方法可以使用 % 格式并避免不一致:

  1. 确保格式字符串包含恰好一个格式字段并将对象传递给格式作为唯一正确的参数
  2. 使用tupledict 作为正确的参数。不要使用 listsetModel tupledicts

这些取自 documentation

If format requires a single argument, values may be a single non-tuple object. Otherwise, values must be a tuple with exactly the number of items specified by the format string, or a single mapping object (for example, a dictionary).

您的示例不属于这两种情况,因为您有 0 个格式化字段,这与 1 不同,因此正确的参数必须元组或映射,但您传递的是一个字符串和一个用户定义的对象。因此,您属于“未定义行为”。

错误消息的不一致已在 this 中讨论过问题(在我的回答中)。

如果您想要更一致的行为,请使用 str.format .

关于python - 为什么 Python 字符串格式会默默地忽略与类实例不匹配的参数计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com