线路延续不起作用?
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
,允许您将三引号放在一行上,文本的开头放在接下来...
它仅在我出于某种原因正在执行打印语句时才有效。例如,我有
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
,允许您将三引号放在一行上,文本的开头放在接下来...