好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python学习之异常处理的避坑指南

最终想了想,还是把这个章节单独拎出来,虽然字数不多。

在代码中,存在return也应当执行finally;

存在return时,else是不执行的;

无return时,else正常执行;

如果发生异常,则else也不执行

finally 与 return 的执行顺序

示例代码如下:

class Test(object):

? ? def division(self, num1, num2):
? ? ? ? try:
? ? ? ? ? ? if num2 == 0:
? ? ? ? ? ? ? ? return '除数不能为0'
? ? ? ? ? ? avg = num1 / num2
? ? ? ? ? ? return avg
? ? ? ? except Exception as e:
? ? ? ? ? ? print('ERROR')
? ? ? ? finally:
? ? ? ? ? ? print('FINALLY')


if __name__ == '__main__':
? ? test = Test()
? ? print(test.division(6, 0))
? ??
# >>> 执行结果如下:
# >>> FINALLY
# >>> 除数不能为0?

注意:即使有return也要是会执行finally的,而且是在return之前执行它。那么最后的结果为。

else 与 return 的执行顺序

示例代码如下:

class Test(object):

? ? def division(self, num1, num2):
? ? ? ? try:
? ? ? ? ? ? avg = num1 / num2
? ? ? ? ? ? return avg
? ? ? ? except Exception as e:
? ? ? ? ? ? print('ERROR')
? ? ? ? else:
? ? ? ? ? ? print('No ERROR')
? ? ? ? finally:
? ? ? ? ? ? print('FINALLY')


if __name__ == '__main__':
? ? test = Test()
? ? print(test.division(6, 2))


# >>> 执行结果如下:
# >>> FINALLY
# >>> 3.0

注意:有return时else是不执行的。所以执行结果如上面的示例代码

那么 无 return 时,执行结果又怎样?

class Test(object):

? ? def division(self, num1, num2):
? ? ? ? try:
? ? ? ? ? ? avg = num1 / num2
? ? ? ? ? ? # return avg
? ? ? ? except Exception as e:
? ? ? ? ? ? print('ERROR')
? ? ? ? else:
? ? ? ? ? ? print('No ERROR')
? ? ? ? finally:
? ? ? ? ? ? print('FINALLY')


if __name__ == '__main__':
? ? test = Test()
? ? print(test.division(6, 2))
? ??
# >>> 执行结果如下:
# >>> No ERROR
# >>> FINALLY
# >>> None

从运行结果我们得出结论:无return时,正常执行else 。

如果是发生异常的情况下, else 也是不会执行的。代码示例如下:

class Test(object):

? ? def division(self, num1, num2):
? ? ? ? try:
? ? ? ? ? ? avg = num1 / num2
? ? ? ? ? ? return avg
? ? ? ? except Exception as e:
? ? ? ? ? ? print('ERROR')
? ? ? ? else:
? ? ? ? ? ? print('No ERROR')
? ? ? ? finally:
? ? ? ? ? ? print('FINALLY')


if __name__ == '__main__':
? ? test = Test()
? ? print(test.division(4, 0))
? ??
# >>> 执行结果如下:
# >>> ERROR
# >>> FINALLY
# >>> None

总结

1、finally 与 return 的执行 顺序;即使有 return 也要执行 finally 的, 而且是在 return 之前执行它。

2、else 与 return 的执行顺序;有 return 时, else 是不执行的。无 return 时, 正常执行的 else 如果发生异常则不会继续执行else。

到此这篇关于Python学习之异常处理的避坑指南的文章就介绍到这了,更多相关Python异常处理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

查看更多关于Python学习之异常处理的避坑指南的详细内容...

  阅读:42次