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. NumPy - 简明教程(上)
  4. 文登市宋村中学
  5. 河东区第二十八中学
  6. 丰城拖船中学
  7. 我是一朵云
  8. 百名网媒总编辑登上知音号欣赏武汉夜色
  9. Python公开课 - 标准库Thread详解
  10. 济南市宝华街小学
  11. 武汉市第二十四中学
  12. 武汉推出越王勾践剑交通卡
  13. Python Selenium find_element_by_css_selector 如何处理多个class
  14. 武汉00后大二学妹拍视频月入七十万
  15. XPath常用函数整理总结
  16. 上海市杨浦区复旦大学附属小学(复旦附小)
  17. 小魔怪的树
  18. 上海市金山区实验幼儿园(卫清西路) - 上海幼儿园黄页
  19. 昆明市寻甸县金所乡苗苗幼儿园 - 昆明市幼儿园黄页
  20. 易中天给英雄武汉的一首诗 - 武汉新鲜事
  21. 沈阳市沈河区教师进修学校附属学校
  22. 武汉动物园火烈鸟孔雀排队打疫苗
  23. 奥迪客户不满加价,被武汉4S店销售群殴
  24. 下笔成章
  25. 详解Tesseract之安装及基本使用
  26. 沈阳市新民市佳佳幼儿园 - 沈阳幼儿园黄页
  27. 广州市岭南画派纪念中学(原七十六中)
  28. 武汉市第二中学(武汉二中)
  29. 深圳市翠园中学高中部
  30. 冻太阳和烤太阳
  31. 肥城市实验小学
  32. 古韵南京 - 二日游
  33. 什么是TCP中三次握手和四次挥手
  34. 警方通报:武汉男子持刀至五死一伤,嫌犯已跳桥
  35. Python公开课 - pyspider基本使用
  36. 广州市海珠实验中学(原第四十二中学)
  37. 河北省唐山市七彩阳光双语幼儿园 - 唐山幼儿园黄页
  38. 重庆市涪陵第五中学校
  39. 桂林市秀峰区智多星幼儿园 - 桂林幼儿园黄页
  40. 愚蠢的老虎
  41. 一毛不拔
  42. 事发武汉农夫山泉矿泉水内惊现大量虫卵
  43. 深圳市福田区荔园外国语小学西校区
  44. 五莲县特殊教育学校
  45. 海口市美兰区新韵幼儿园 - 海南省幼儿园黄页
  46. 呼兰区孟家乡红旗小学校
  47. Python公开课 - 爬虫之代理
  48. 吉林省长春市汽车开发区宝玉第一幼儿园 - 长春幼儿园黄页
  49. 小妖精的礼物
  50. 王猛扪虱谈天下
  51. 每个人都有两扇窗
  52. 沈阳市于洪区东窑小学
  53. Python公开课 - 爬虫识别滑动验证码
  54. 央媒聚焦!国庆假期173.78万人次打卡大美黄陂
  55. 上海市徐汇区乌南幼儿园(淮海中路) - 上海幼儿园黄页
  56. 阳光·华育素质教育幼儿园 - 石家庄幼儿园黄页
  57. 房山区南尚乐中学
  58. 北京市东城区西中街小学
  59. 武汉女子网上做兼职被骗六十五万
  60. 吴江市鲈乡幼儿园太湖分园 - 苏州幼儿园黄页