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 &lt;= j &lt;= 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在断言中打破长字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

pep8介绍

即使返回的字符串似乎与断言的字符串相同,断言语句也会返回 False [重复]

15.python正则匹配 元字符转义重复或捕获分组断言:零度断言负向零宽断言贪婪非贪婪引擎选项

Python,Eclipse中正则表达式字符串的pep8警告

用javascript定义一个长字符串[重复]

使用scala删除长字符串中的重复单词