PEP8在断言中打破长字符串[重复]
Posted
技术标签:
【中文标题】PEP8在断言中打破长字符串[重复]【英文标题】:PEP8 breaking long string in assert [duplicate] 【发布时间】:2016-11-05 00:36:08 【问题描述】:我有这行代码:
assert 0 <= j <= self.n, "First edge needs to be between 0 and ".format(self.n)
我希望 pep8 开心,但我不明白如何打破这条线。我尝试在逗号后中断并得到无效的语法。我试过用额外的“”来打破字符串,如How to break long string lines for PEP8 compliance?。 PEP8 很高兴,但断言只产生了消息的前半部分。
打破长断言字符串的正确方法是什么?
【问题讨论】:
改为打破 PEP8。 您可以在逗号后添加一个反斜杠,并将其余部分放在新行上。 就个人而言,我会选择一个稍微更具可读性的版本:将失败消息分配给一个变量,并在断言中使用该变量。 另见How can I break up this long line in Python? 您可能不再需要换行了,即使 fstring 更适合这些用例:assert 0 <= j <= self.n, f"First edge needs to be between 0 and self.n"
它更简洁。
【参考方案1】:
使用括号:
assert 0 <= j <= self.n, ("First edge needs to be "
"between 0 and ".format(self.n))
或者:
assert 0 <= j <= self.n, ("First edge needs to be between 0 and "
.format(self.n))
或者使用format
函数的括号:
assert 0 <= j <= self.n, "First edge needs to be between 0 and ".format(
self.n)
【讨论】:
【参考方案2】:考虑到当您使用 -O
选项运行解释器时可以优化 assert
语句,您可能希望将其保留为单个语句并在括号中使用字符串连接:
assert 0 <= j <= self.n, ('First edge needs to be between '
'0 and '.format(self.n))
或在 Python 3.6+ 中使用 f-strings:
assert 0 <= j <= self.n, ('First edge needs to be between '
f'0 and self.n')
如果您不关心优化(例如,您正在编写测试),那么将一行分成两个语句也是一种选择:
message = 'First edge needs to be between 0 and '.format(self.n)
assert 0 <= j <= self.n, message
【讨论】:
【参考方案3】:你可以像这样强制换行:
assert 0 <= j <= self.n,\
"print stuff"
如果括号等没有自动执行,这总是会使行继续。你可以将下一行缩进到最易读的地方,就像我在上面所做的那样。
【讨论】:
以上是关于PEP8在断言中打破长字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章
即使返回的字符串似乎与断言的字符串相同,断言语句也会返回 False [重复]
15.python正则匹配 元字符转义重复或捕获分组断言:零度断言负向零宽断言贪婪非贪婪引擎选项