使用传递非必要的else语句

时间:2013-12-31 16:08:10

标签: python pep8

根据PEP8文档,我无法找到任何关于我是否应该在代码上使用pass的美学原因的参考。根据下面的示例,我应该保留else还是可以删除它们?到目前为止,我保留它的主要原因是基于“明确比隐含更好”的口头禅。

if fields:
    for i in foo:
        if i == 'something':
            print "something"
        else:
            pass
else:
    pass

5 个答案:

答案 0 :(得分:12)

是的,您可以/应该删除它们,因为它们什么都不做。

Python社区教导"显性优于隐式"只要显式代码做了一些有用的事情。然而,那些else: pass对代码没有任何积极作用。相反,他们所做的只是毫无意义地消耗两条线。

答案 1 :(得分:4)

你可以安全地删除那些因为没有任何意义保持代码无效:

if fields:
    for i in foo:
        if i == 'something':
            print "something"

答案 2 :(得分:4)

否则传递是死代码,你应该删除它,因为它会给代码增加不必要的噪音,无论如何代码都会更清晰,更容易理解。

答案 3 :(得分:3)

我可以想到传递可能有用的几种情况 - 后两者是临时存根:

  • 如果您想忽略可接受的异常
  • 调试时需要在函数末尾插入断点。
  • 作为要推迟实施的功能中的填充

我无法想象我将使用传递

的任何其他情况

修改

在某些情况下,当实施 if - elif - else 链时,你有一些不需要采取任何行动的常见情况 - 以及需要特定操作的罕见情况 - 为了执行效率,您可以在第一个后使用传递

if <some common condition>:
    pass
elif <rare condition>:
    <do something>
elif <another rare condition>:
    <do something else>
else:
   <do another stuff>

答案 4 :(得分:1)

关于 else 的事情是它们不仅仅是if语句的一部分;它出现在 尝试 语句中, 用于 循环。您没有在这些区域看到 else (在此上下文中),是吗?

try:
    raw_input("say my name")
except:
    print "Heisenberg"
# Meh, this is not needed.
else:
    pass

如果我们循环某些东西并检查某些条件(使用 if ),那么 else 会添加不必要的行。

这是一个查找文件夹的循环:

for path in pathlist
    if os.path.isdir(path):
        print "Found a folder, yay!"
        break
    else:
        continue

显然, else 在每个循环中执行并且毫无意义。这可以避免,如 PEP 8 本身所暗示的那样:

  

但最重要的是:知道何时不一致 - 有时风格指南不适用。如有疑问,请使用您的最佳判断。   查看其他示例并确定最佳效果。不要犹豫   问!
当应用指南时,即使是习惯于阅读本PEP之后的代码的人,也会使代码的可读性降低。