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

时间:2013-10-22 13:41:12

标签: python if-statement exit

以下两个案例描述了我的困境。我想了解代码何时更稳定。

案例A

from sys import argv

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

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

exit( 0 )

案例B

from sys import argv

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

if a == 0.:
    exit(1)

print b / a

exit( 0 )

4 个答案:

答案 0 :(得分:2)

这两种方法都提供相同的稳定性,因为从本质上讲,它们都是一样的。

但是,第一个不必要地使用else。如果代码命中exit(1)行,它会立即退出脚本。意思是,else没有任何积极的贡献(例如流量控制)。实际上,它所做的就是占用一条线并导致不必要的缩进。

所以,如果你想知道选择哪种方法,我会说要使用第二种方法。它更干净,使用更少的语法来完成同样的工作。


此外,由于退出脚本通常意味着发生异常和不良事件,仅使用if而不使用else会使您更加清楚地防止发生异常事件。

答案 1 :(得分:2)

您应该尝试使代码更简洁,并且更好地使用它:

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,则退出代码将为非零。

答案 2 :(得分:2)

两个代码片段都有效且没有错误。但是,他们表达的观点略有不同。

第一种状态:根据a的值,做这个或那个。

第二种说法:如果a不合适,则中止。 (并继续。)

所以第一个看到两个版本同样作为算法的一部分,而第二个版本可以很容易地被读作“如果这个罕见的变体,只是中止”。

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

此外,稍后修补代码,扩展代码等受到编写代码的方式的影响。预计这是一种高级艺术形式,但当你提出这样的问题时,它应该在你的脑后。

在你的情况下,我猜第一个版本更容易引入后面的错误,因为它有第二个分支的两个块(if的“then”分支,而下面的那个执行{ {1}})。这是一个轻微的缺陷,只要你想延长它就为变种留出了空间。例如,如果要为结果加下划线,则有两个选项:

exit(0)

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

哪个更好?或者也许if a == 0.: exit(1) else: print b / a print '----' exit(0) 应该是“then”块的一部分?这些是我更喜欢第二个版本的原因。

答案 3 :(得分:0)

在第一个声明中

print b/a

仅适用于以下情况 如果没有'等于0。: