行继续不起作用?

时间:2018-08-08 15:45:46

标签: python python-3.x python-2.7 exception-handling warnings

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

warnings.warn('blabla\ 
continuing writing') 

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

1 个答案:

答案 0 :(得分:1)

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

反斜杠继续是反斜杠,后跟换行符。反斜杠后跟一个空格,后跟一个换行符,只是一个反斜杠转义的空格和一个未转义的换行符。

当然,这在大多数文本编辑器中以及在Stack Overflow之类的网站上都很难看到(我必须在您的问题上单击“编辑”并在光标周围滚动以进行检查),这是许多原因之一人们尽可能避免使用反斜杠。

在字符串中使用它们尤其是一个问题,因为反斜杠转义的空格放在字符串中是完全合法的事情,因此编译器不会给您错误,甚至大多数linter都不会警告它。

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

一个更好的解决方案-假设您实际上在那里需要换行符-使用三引号:

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,从而使您可以将三引号放在一行上,并将文本开头放在下一个...