gre*_*grf 8 python syntax backslash
我理解当前行继续的最佳实践是在括号内使用隐含的延续.例如:
a = (1 + 2
+ 3 + 4)
Run Code Online (Sandbox Code Playgroud)
来自PEP8(https://www.python.org/dev/peps/pep-0008/):
包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续.通过将表达式包装在括号中,可以在多行中分割长行.这些应该优先使用反斜杠来继续行.
我打算继续遵循这个惯例,但是,我的问题是我应该如何担心现有代码中的错误继续使用反斜杠:
a = 1 + 2 \
+ 3 + 4
Run Code Online (Sandbox Code Playgroud)
python docs(https://docs.python.org/2.7/howto/doanddont.html#using-backslash-to-continue-statements)警告反斜杠后面一行末尾的杂散空间可以生成代码然而,正如在这个问题中指出的那样(" 如何使用Python反斜杠行继续是巧妙的错误?"),给出的示例只会导致引发SyntaxError,这不是一个微妙的问题,因为它很容易识别.那么,我的问题是,是否存在继续使用反斜杠的行导致比解析错误更糟糕的情况?我感兴趣的例子是反斜杠延续中的错误会产生运行时异常,或者更糟糕的是,代码会以无意识的行为进行静默运行.
“微妙的错误”是主观的;每个人都有自己对微妙之处的容忍度。
一个经常被引用的可能有害的行继续的例子,不管是\-separated 还是隐式的,是容器结构中字符串的延续:
available_resources = [
"color monitor",
"big disk",
"Cray"
"on-line drawing routines",
"mouse",
"keyboard",
"power cables",
]
Run Code Online (Sandbox Code Playgroud)
可用资源包括 Cray 超级计算机,还是Crayon-line drawing routines?(这个例子来自“Expert C Programming”一书,在此处适用于 Python)。
此代码块并不含糊,但其由延续 + 缩进创建的视觉外观可能具有欺骗性,并可能导致人为理解错误。
我能想到的一种情况是程序员忘记了\. 当有人稍后来添加值时,这种情况尤其可能发生。尽管这个例子仍然有些人为,因为连续行必须具有相同的缩进级别(否则它会因 IndentationError 而失败)。
例子:
a = 1 \
+ 2 \
+ 3
assert a == 6
Run Code Online (Sandbox Code Playgroud)
后来有人加了一行:
a = 1 \
+ 2 \
+ 3 # Whoops, forgot to add \ !
+ 4
assert a == 10 # Nope
Run Code Online (Sandbox Code Playgroud)