【问题标题】:PEP8-compliant way to line-wrap a chain of ['item']['item'] lookupsPEP8 兼容的方式来换行 ['item']['item'] 查找链
【发布时间】:2021-02-01 01:35:06
【问题描述】:

E501:行太长(88 > 79 个字符)

if true:
    if true:
        if true:
            record = self.content['data']['country_name']['city_name']['postal_address']

我的失败尝试:

if true:
    if true:
        if true:
            record = self.content['data']['country_name'] \
                                 ['city_name']['postal_address']

这给出了一个错误:'[' line: 4, column: 58 之前的 E211 whitespace

我正在使用:http://pep8online.com

【问题讨论】:

  • 顺便说一句,标题编辑是为了使标题更加独立——标题使用“this”来指代问题内容的地方,这样有人需要点击才能知道什么“this”是在他们知道他们是否有答案(或者他们是否有同样的问题)之前,有点像点击诱饵。
  • 感谢编辑,听起来更好。

标签: python pep8


【解决方案1】:

有几种方法,一种可能性(我更喜欢)是添加中间变量(带有一些有意义的名称)。

if True:
    if True:
        if True:
            data = self.content['data']
            record = data['country_name']['city_name']['postal_address']

另外,三个嵌套的ifs 可能是一些重构的好候选者,可能带有一些辅助函数,这也会减少行长。

另一种选择:使用括号(PEP8 也建议在反斜杠上使用)

        record = (
            self.content
            ['data']
            ['country_name']
            ['city_name']
            ['postal_address']
        )

【讨论】:

  • 嘿何塞!我喜欢第二个选项...非常整洁!谢谢
  • 我的荣幸! :)
【解决方案2】:

首先,考虑两个if子句是否可以用and操作符合并。

但是,假设每个if 子句都有不同的条件,它可能被放置在一个方法中,您可以在其中添加一个或多个将提前退出的保护子句:

def get_content(content):
    if not True:
        return

    if not True:
        return

    if not True:
        return

    return content['data']['country_name']['city_name']['postal_address']


record = get_content(content)

您也可以考虑创建中间变量,这可能有助于使其更具可读性和更短。

【讨论】:

  • 这让我想起了Code: Align The Happy Path To The Left Edge文章中给出的极好的建议。
  • 我见过嵌套 5 到 10 级 if 子句的学生成绩代码。这是一段令人惊叹的 C 代码,但后来发现它有一个错误,结果发现它非常难以调试。另外,我在里面读了很多if A != B" with other if 子句,有时嵌套很深。但是自从我第一次听说“保护子句”这个词后,就更容易向其他人解释为什么提前退出并恢复一些缩进级别和代码清晰度通常是个好主意。
【解决方案3】:

它并不漂亮,但如果你只是想要一些让自动样式检查器满意的东西......

if true:
    if true:
        if true:
            record = self.content['data']['country_name'
                                          ]['city_name']['postal_address']

【讨论】:

  • 完美运行!但是,我同意它看起来很糟糕:-)
猜你喜欢
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
相关资源
最近更新 更多