据我所知,目前行继续的最佳做法是在括号内使用隐含的延续。例如:
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,这不是一个微妙的问题,因为它很容易识别。那么,我的问题是,是否存在使用反斜杠继续行导致比解析错误更糟糕的情况?我对以下示例感兴趣:反斜杠延续中的错误会产生运行时异常,或者更糟糕的是,代码会以静默方式运行但会出现意外行为。
答案 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"""