线路延续不起作用?

Line continuation not working?

它仅在我出于某种原因正在执行打印语句时才有效。例如,我有

warnings.warn('blabla\ 
continuing writing') 

继续在 IDE 的下一行。它给了我一个错误,但它和往常一样是同一行的延续。为什么会这样?

至少在此处发布时,反斜杠后有一个 space。

反斜杠延续是一个反斜杠后跟一个换行符。反斜杠后跟 space 后跟换行只是反斜杠转义的 space 和未转义的换行。

当然,这在大多数文本编辑器和 Stack Overflow 等网站上都很难看到(我不得不在你的问题上单击 "edit" 并滚动光标来检查),这是一个许多人尽可能避免反斜杠延续的原因。

在字符串中使用它们尤其是个问题,因为反斜杠转义的 space 放在字符串中是完全合法的,所以编译器不会给你一个错误,并且即使大多数 linters 也不会对此发出警告。

如果您可以配置您的编辑器以识别反斜杠白色space并以某种方式显示它,或者可能只是用一些微妙的标记向您显示所有换行符,这可能会有所帮助。

一个更好的解决方案——假设你真的想要一个换行符——是使用三重引号:

warnings.warn('''blabla 
continuing writing''')

… 可能与 textwrap.dedent 一起,这样您就可以很好地排列:1

from textwrap import dedent as D
warnings.warn(D(
    '''blabla 
    continuing writing'''))

... 或使用明确的 \n:

warnings.warn('blabla\ncontinuing writing')

…可能连同字符串连接:

warnings.warn('blabla\n'
              'continuing writing')

(根据此输出的目的,也可能值得考虑不担心换行符的确切位置,让 textwrap.fill 负责使其适合输出。)


1.然而,值得注意的是 textwrap 文档中的示例实际上使用反斜杠转义换行符来提供给 dedent,允许您将三引号放在一行上,文本的开头放在接下来...