Python公开课 - 异常处理

前言

在代码开发的过程中,经常或碰到一些错误异常情况,对于Python来说,自有一套规范的处理体系

try...except...finally...

现在高级语言都会使用try catch机制来捕获处理程序运行时候的各种异常,下面举一个除零异常的例子:

try:
    print('try...')
    r = 15 / 0
    print('result:', r)
except ZeroDivisionError as e:
    print('except:', e)
finally:
    print('finally...')
print('END')

输出:
try...
except: division by zero
finally...
END

示例说明:

  • try - 程序正常逻辑的代码
  • except - 捕获异常后处理的代码
  • finally - 不过如何都要执行的代码

当然如果我们不知道具体是啥异常的时候,可以使用一个通用异常类Exception来表示

try:
    print('try...')
    r = 15 / 0
    print('result:', r)
except Exception as e:
    print('except:', e)
finally:
    print('finally...')
print('END')

输出:
try...
('except:', ZeroDivisionError('integer division or modulo by zero',))
finally...
END

错误堆栈

在实际运行的过程中,如果直接将异常输出,往往只能获取到错误信息,而无法看到由哪块代码产生的错误,也就是需要查看错误堆栈,有几种方式可以实现

通过logging模块

import logging

def calc(s):
    return s/0

def main():
    try:
        a = calc(5)
    except Exception as e:
        logging.exception(e)

main()
print('END')


输出:
Traceback (most recent call last):
  File "test5.py", line 8, in main
    a = calc(5)
  File "test5.py", line 4, in calc
    return s/0
ZeroDivisionError: division by zero
END

通过trackback模块

import traceback

def calc(s):
    return s/0

def main():
    try:
        a = calc(5)
    except Exception as e:
        traceback.print_exc()

main()
print('END')


输出:
Traceback (most recent call last):
  File "test6.py", line 8, in main
    a = calc(5)
  File "test6.py", line 4, in calc
    return s/0
ZeroDivisionError: division by zero
END

自定义异常并抛出

class ShortInputException(Exception):
    def __init__(self, length, atleast):
        self.length = length
        self.atleast = atleast

try:
    s = input('please input:')
    if len(s) < 3:
        raise ShortInputException(len(s), 3)
except ShortInputException as e:
    print('输入长度是%s,长度至少是%s' %(e.length, e.atleast))
else:
    print('nothing...')

如果输入字符长度小于3,那么将会抛出 ShortInputException 异常,在Python中是通过raise关键字来进行异常抛出

相关阅读


相关推荐
  1. 湖北将发放消费券 - 武汉新鲜事
  2. 宁波市通途小学(行知实验小学)
  3. 宁海县深圳镇初级中学
  4. 银川市实验中学
  5. 嘉年华双语幼儿园 - 石家庄幼儿园黄页
  6. 易中天给英雄武汉的一首诗 - 武汉新鲜事
  7. 桂林市恭城瑶族自治县妇联幼儿园莲花分园 - 桂林幼儿园黄页
  8. 贵人多忘事
  9. 南京市西善桥中心小学
  10. 大连市第十二中学
  11. 脱单!武汉的相亲角在哪你知道吗?
  12. 昆明市五华区菱角塘幼儿园 - 昆明市幼儿园黄页
  13. 狐狸设陷阱
  14. 天津市宝坻区新开口镇第一中心小学(新开口一中心)
  15. 北京市顺义区天竺中心小学
  16. 重庆江北寸滩实验学校
  17. 武汉女子网上做兼职被骗六十五万
  18. 内蒙古呼和浩特市金川开发区金色阳光幼儿园 - 呼和浩特幼儿园黄页
  19. 大连市甘井子区阳光爱心托管 - 大连幼儿园黄页
  20. 警方通报:武汉男子持刀至五死一伤,嫌犯已跳桥
  21. 长沙市开福区新港镇荷叶小学
  22. Python公开课 - 为什么选择Python
  23. Python公开课 - 详解模块
  24. Python公开课 - Python中的保留关键字
  25. 百名网媒总编辑登上知音号欣赏武汉夜色
  26. 武汉00后大二学妹拍视频月入七十万
  27. 花朵幼儿园 - 保定幼儿园黄页
  28. 幼儿园入学准备物品清单
  29. 北京市海淀北部新区实验中学
  30. 发明
  31. Vim - 基础教程
  32. 东莞市万江中心小学
  33. 如何成为一个合格的项目经理
  34. 流泪的小熊兔
  35. 寂寞的树
  36. 央媒聚焦!国庆假期173.78万人次打卡大美黄陂
  37. 武汉一女子七天被骗220万
  38. 武汉动物园火烈鸟孔雀排队打疫苗
  39. 馆陶县芦里中学
  40. Python源码剖析 - 对象初探
  41. 韶关市乐昌市老坪石镇中心小学
  42. Python基础 - 详解django.utils.dateparse
  43. 老人和驴子
  44. 江门市会城南坦学校(中学部)
  45. 上海市徐汇区新上中幼稚园 - 上海幼儿园黄页
  46. 南宁市西园路小学
  47. 祖述尧舜,宪章文武
  48. 滨州市滨城区第一小学(滨城区一小)
  49. 北京市第五中学分校(五中分校)
  50. 婴儿夜里受凉咳嗽怎么办好 - 育儿经验
  51. 临沂市第十中学
  52. 鸿门宴
  53. Python公开课 - 标准库Thread详解
  54. GitHub 宣布私有代码库完全免费 - 赶紧体验
  55. 辽中县养士堡九年一贯制学校
  56. 上海市徐汇区漕河泾开发区实验小学( 漕开发小学)
  57. 昆明市安宁市八街幼儿园 - 昆明市幼儿园黄页
  58. 刘邦识人与项羽失人
  59. 海口市美兰区才华幼儿园 - 海南省幼儿园黄页
  60. Python源码剖析 - Python中的整数对象
  61. 异想天开的老鼠