首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中使用if/ exit语句和exit函数

在Python中使用if/ exit语句和exit函数
EN

Stack Overflow用户
提问于 2013-10-22 13:41:11
回答 4查看 20.9K关注 0票数 3

下面的两个案例描述了我的困境。我想了解什么时候代码更稳定。

案例A

代码语言:javascript
复制
from sys import argv

a = float( argv[1] )
b = float( argv[2] )

if a == 0.:
    exit(1)
else:          
    print b / a

exit( 0 )

案例B

代码语言:javascript
复制
from sys import argv

a = float( argv[1] )
b = float( argv[2] )

if a == 0.:
    exit(1)

print b / a

exit( 0 )
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-22 13:49:20

这两种方法提供了相同的稳定性,因为从本质上说,它们所做的事情是一样的。

但是,第一种方法不必要地使用else。如果代码击中exit(1)行,它将立即退出脚本。这意味着,else并没有做出任何积极的贡献(比如流控制)。事实上,它所做的只是占用一行,造成不必要的缩进。

所以,如果您想知道选择哪种方法,我建议使用第二种方法。它更干净,使用更少的语法来完成相同的工作。

另外,由于退出脚本通常意味着发生了一些不寻常和糟糕的事情,因此只使用不带elseelse就可以使您更清楚地知道,您是在防范异常事件。

票数 4
EN

Stack Overflow用户

发布于 2013-10-22 13:54:08

您应该尝试使您的代码更简洁,并有更好的流到它:

代码语言:javascript
复制
import sys

def main():
    a, b = map(float, sys.argv[1:2])
    if a == 0:
        return 1
    print b / a

if __name__ == '__main__':
    sys.exit(main())

这样,您将始终得到一个退出代码,退出代码将是非零,如果a等于0

票数 3
EN

Stack Overflow用户

发布于 2013-10-22 13:58:17

这两个代码片段都是有效的,并且没有错误。然而,他们表达的想法略有不同。

第一种状态:根据a的值,执行这或那样的操作。

第二种状态是:如果a不合适,就中止。(以其他方式继续。)

因此,前者将这两个版本同等地视为算法的一部分,而第二个版本则很容易被理解为“在这种罕见的变体的情况下,只是中止”。

这对运行时或稳定性没有影响(正如您所说)。但你应该考虑你想表达什么。下一个维护您的代码的开发人员可能会被帮助或混淆,这取决于您所表达的内容。

此外,以后对代码的修补、扩展等也会受到代码编写方式的影响。预期这是一种更高的艺术形式,但当你问这样的问题时,它应该在你的脑后。

在您的例子中,我猜第一个版本更容易引入稍后的错误,因为它对于第二个分支有两个块( if的“然后”分支,以及周围执行exit(0)的块下面)。这是一个微小的缺陷,只要您想要扩展它,就会为变体留下空间。例如,如果要在结果下划线,则有两个选项:

代码语言:javascript
复制
if a == 0.:
  exit(1)
else:
  print b / a
  print '----'
exit(0)

代码语言:javascript
复制
if a == 0.:
  exit(1)
else:
  print b / a
print '----'
exit(0)

哪种更好些呢?或者exit(0)也应该是“然后”块的一部分?这就是我喜欢第二个版本的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19519607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档