Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 491|回复: 0

Python的异常处理机制

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-28 14:11:38 | 显示全部楼层 |阅读模式

    1.错误和异常

    错误   指的是代码的语法或者逻辑有错误

    异常  指的是 由错误引起的,当出现错误,python解释器就无法处理程序,报出异常

    出现异常,程序终止执行,如果不加以处理(异常捕捉),就会出现所谓的traceback 回溯 终止程序

    2.python的异常处理

    使用 python 异常处理机制,遇见异常,不会抛出不友好的traceback,而是有except决定抛出的信息

    python的错误处理机制让你能够细致的控制与用户分享错误信息的程度,要分享多少信息由你决定。

    1.try/except

    def main(): a=3/0 print(a) try: main() except ZeroDivisionError: print("error")  

     try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理,如果没有try/except,程序发生错误会终止运行,且抛出不友好的traceback,有了该语句,try语句发生错误,只会打印出“error”提示。

    except捕捉 ZeroDivisionError 异常,也可以捕捉多种异常  except(Exception1[, Exception2[,...ExceptionN]]]):

    except也可以不带任何异常类型,意味着只要try有错,就执行except后面的语句,但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所有的异常。

    def main(): a=3/0 print(a) try: main() except: print("error") 

     2.try/except/else/finally

    def main(): a=3/1
        print(a) try: main() except ZeroDivisionError: print("error") else: print(main()) finally: print("always do this")

    try语句内容有错,执行except语句,没有错误,执行else语句

    3. 抛出异常 raise

    python使用raise 语句 抛出一个指定的异常

    raise NameError(“hello”)

    有了raise 语句 就有异常,不管程序有没有异常,raise出现的地方就是异常 

    def is_work_done(): a=3/1
        return a try: is_work_done() raise NameError("HELLO") except: print("hello") raise #raise的唯一参数是异常的类或者实例(也就是exception的子类)
    如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

     4 . 自定义异常类型

    你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承,例如:

    class MyError(Exception): def __init__(self,value): super().__init__() self.value=value try: raise MyError(9) except MyError as e: print(e.value)

    5. Exception 和 BaseException区别

    BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration... +-- StandardError... +-- Warning...

    可以看出  BaseException 是最最基础的异常类,Exception 继承他,BaseException除了包含所有的Exception外还包含了SystemExitKeyboardInterruptGeneratorExit三个异常。这三个高级异常很少使用,我们在处理常见异常,只需要基于Exception即可。

    6.  except Exception as e和 except Exception, e

    两者意思相同 第一种写法推荐使用,第二种 python3 不支持

    7. 常见的异常类型

      描述
    BaseError 所有异常的基类
    SystemExit 解释器请求退出
    KeyBoardInterrupt 用户中断执行(ctrl+c)
    Exception 常规错误的基类
    AssertionError 断句错误,当assert关键字后面的条件为假时,程序就会抛出
    FileNotFoundError 文件不存在
    AttributeError 属性错误,对象属性不存在的时候
    IndexError 索引错误,索引超出范围
    KeyError 在字典中查找一个不存在的关键字
    NameError 尝试访问一个不存在的变量
    SyntaxError 语法错误
    TypeError 类型错误,不同类型间的无效操作,1+“1”
    ZeroDivisionError 除0错误,分母为0
    EOFError 没有内建输入,到达EOF标记
    IOError 输入/输出操作失败
    OSError 操作系统错误
    WindowsError 系统调用失败
    RuntimeError 一般的运行时错误
    IndentationError 缩进错误
    SystemError 一般的解释器错误
    TabError

    Tab和空格混用

    Warning

    所有警告的基类

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    8. 注意事项

    1. 只处理你知道的异常,避免捕获所有异常然后吞掉它们。
    2. 抛出的异常应该说明原因
    3. 如果有需要,切记使用finally来释放资源
    4. 如果有需要,请不要忘记在处理异常后做清理工作或者回滚操作

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-3 14:31 , Processed in 0.059044 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表