• Python3.x基础学习-异常报错处理


    异常处理

    异常就是语法正常的前提下,程序运行时报错就是异常
    当python脚本发生异常时我们需要捕获处理它,否则程序会终止执行

    print('hello world')
    print(1/0)        # ZeroDivisionError: division by zero
    print('代码结束')
    异常处理 try,except,else,finally,raise
    程序从上到下执行,先执行try的代码,如果代码报错,则不会执行下面的代码
    执行except中的异常代码
    如果try没报错,则不执行except中代码

    try:
        print('hello word')
        print(1/0)
    except IndexError:
        print('索引异常')
    
    except ZeroDivisionError:
        print('o是除数异常')
    
    except:
        print("代码有错误")
    print('最后的代码')

    常见的报错信息:

    ZeroDivisionError,IndexError,NameError,FileNotFoundError,FileExistsError,TypeError

    try正常执行结束,不会走except,走else
    try中有错误,走except,不走else
    无论代码有无异常,都会走finally

    
    
    try:
        print("abc")
        print(1/0)
        print('b')
    except BaseException:
        print("出现错误了")
    else:
        print("没有异常")
    finally:
        print("有无异常都得给我跑起来")
    
    

    内层try无法捕获异常,会向外传递
    外层异常无法捕获,会继续向外传递,知道捕获异常为止,没捕获报错

    try:
        with open('test2.py','w+') as f:
            content = f.read()
            try:
                with open('test3.txt','r') as f:
                    print(f.read())
            except FileExistsError:
                print("文件未发现错误")
    except BaseException:
        print('外层捕获')

    变量名也可以作为异常的对象,一般使用e来表示
    e对象中包含了异常信息的一些描述,我们可以根据描述做不同的处理

    try:
        print("hello world")
        print(1/0)
        print("over")
    except Exception as e:
        print(e)
    
    
    def func1():
        print("--func1-1-")
        print(num)
        print('---func1-2-')
    
    def func2():
        try:
            print('---func2--1')
            func1()
            print('----func2--2')
        except FileNotFoundError:
            print("func1出现异常")
        else:
            print('----func2--3')
        finally:
            print("最后的代码")
    
    try:
        func2()
        print('func2执行完了')
    except NameError:
        print("命名错误")
    
    


    用户可以根据业务逻辑手动抛出异常
    并且用户可以根据需求来抛出系统异常(python 已经定义好的异常)和用户自定义异常

    try:
        name = a
        if name.isalpha():
            raise Exception('不能全是字母')
    except BaseException as e:
        print("----exception----",e)
    
    
    class ShortInputException(Exception):
        pass
    
    try:
        raise ShortInputException('输入太短')
    except BaseException as e:
        print(e)
    
    # 判断输入的字符串长度,如果小于指定长度就报错
    class MyException(Exception):
        def __init__(self,length,atleast):
            self.length = length #输入的字符串长度
            self.atleast = atleast
        def __str__(self):
            return '长度{},规定长度{}'.format(self.length,self.atleast)
    
    try:
        msg = input("请输入:")
        if len(msg)<5:
            raise MyException(len(msg),5)
    except Exception as e:
        print(e)



  • 相关阅读:
    延时函数出错,volatile一例
    【转】STM32中的抢占优先级、响应优先级概念
    【转载】串口中怎样接收一个完整数据包的解析
    ARM-ContexM3/4组优先级和子优先级抢占规则
    【转载】Keil中的USE MicroLib说明
    线程让出实验【RT-Thread学习笔记 4】
    线程优先级抢占实验【RT-Thread学习笔记 3】
    RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
    熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】
    RT-Thread下的串口驱动程序分析【转载】
  • 原文地址:https://www.cnblogs.com/johnsonbug/p/12709995.html
Copyright © 2020-2023  润新知