python3 json 格式的 textwrap 意外输出?

python3 textwrap unexpected output on json format?

>>> a = '{"key1": "aaaaaaaaaaaaaaaaa", "key2": "bbbbbbbbbbbbbbbbbbbbbbbb"}'
>>> len(a)
64
>>> textwrap.wrap(a, 32, drop_whitespace=False)
['{"key1": "aaaaaaaaaaaaaaaaa", ', '"key2": ', '"bbbbbbbbbbbbbbbbbbbbbbb"}']

我期待

['{"key1": "aaaaaaaaaaaaaaaaa", "k', 'ey2": "bbbbbbbbbbbbbbbbbbbbbbb"}']

我遗漏了什么?

根据 official documentation:

你的期望是错误的

Wraps the single paragraph in text (a string) so every line is at most width characters long. Returns a list of output lines, without final newlines.
[...]
Text is preferably wrapped on whitespaces and right after the hyphens in hyphenated words; only then will long words be broken if necessary, unless TextWrapper.break_long_words is set to false.

您的预期输出在 32 个字符后按字面意思被中断,而实际输出被分成 30、8 和 27 个字符长的片段 – 仅在原始字符串的白色 space 个字符处中断。

第二段比其他段短很多,因为第一个字符串加上下一个非白色space 运行 "key2": 超过32个字符,而这个短运行 加上 next 短语 also 超过 32 个字符。只有当 space 或连字符绝对不可能断开时,才会出现非白色 space 运行 中间的断开。