在Python中,反斜杠的行继续是危险的吗?

时间:2018-02-16 16:10:51

标签: python syntax backslash

据我所知,目前行继续的最佳做法是在括号内使用隐含的延续。例如:

a = (1 + 2
     + 3 + 4)

来自PEP8(https://www.python.org/dev/peps/pep-0008/):

  

包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续。通过在括号中包装表达式,可以在多行中分割长行。这些应该优先使用反斜杠进行续行。

我打算继续遵循这个惯例,但是,我的问题是我应该对现有代码中的错误感到担心,这些错误会继续使用反斜杠:

a = 1 + 2 \
    + 3 + 4

python docs(https://docs.python.org/2.7/howto/doanddont.html#using-backslash-to-continue-statements)警告说反斜杠后面一行末尾的杂散空间会使代码“巧妙地错误”,但正如这个问题所指出的那样(How can using Python backslash line continuation be subtly wrong? ),给出的示例只会导致引发SyntaxError,这不是一个微妙的问题,因为它很容易识别。那么,我的问题是,是否存在使用反斜杠继续行导致比解析错误更糟糕的情况?我对以下示例感兴趣:反斜杠延续中的错误会产生运行时异常,或者更糟糕的是,代码会以静默方式运行但会出现意外行为。

3 个答案:

答案 0 :(得分:3)

我能想到的一个案例就是程序员忘记了\。当有人来,并在以后添加值时,这种情况尤其可能发生。虽然这个例子仍然有点人为,因为延续行必须具有相同的缩进级别(否则会因IndentationError而失败)。

示例:

a = 1 \
+ 2 \
+ 3
assert a == 6

稍后,有人添加一行:

a = 1 \
+ 2 \
+ 3    # Whoops, forgot to add \ !
+ 4
assert a == 10  # Nope

答案 1 :(得分:2)

"完全错误"是主观的;每个人都有自己的微妙容忍度。

一个经常被引用的可能有害的行继续的例子,无论{"timeIn":"2018-1-31 11:57"},{"timeIn":"2018-1-31 11:58"},{"timeIn":"2018-1-31 11:59"},{"timeIn":"2018-1-31 12:00"},{"timeIn":"2018-1-31 12:01"},{"timeIn":"2018-1-31 12:02"}, - 分离还是隐式,都是容器结构中字符串的延续:

\

可用资源是否包括Cray超级计算机或available_resources = [ "color monitor", "big disk", "Cray" "on-line drawing routines", "mouse", "keyboard", "power cables", ] ? (这个例子来自书"专家C编程",这里适用于Python)。

这个代码块并不含糊,但它通过延续+缩进创建的视觉外观可能具有欺骗性,并可能导致理解中的人为错误。

答案 2 :(得分:0)

我想像@ 0x5453,如果你错误地在你的代码中添加反斜杠。
这个反斜杠导致注释与。

连接
a = "Some text. " \
"""Here are some multiline comments
that will be added to a"""