python3的异常处理

发布时间:2019-09-28 08:39:10编辑:auto阅读(2071)

    在python运行的时候难免出现一些异常,但是python在遇到异常的时候就会停止了,但是有时候我们需要python即使在有异常的时候也需要继续向下运行,这个时候我们就需要用到异常处理了.
    1.简单的异常处理如:

    print(a)
    Traceback (most recent call last):
      File "<input>", line 2, in <module>
    NameError: name 'a' is not defined

    我们在没有定义变量a的时候它就会报错,报错是NameError
    我们如何让他这样也继续运行下去呢?
    运用下异常处理就行了!

    try:
        print(a)
    except NameError:
        print('NameError 意思就是没有这个变量啊')
    
    NameError 意思就是没有这个变量啊
    

    这样即使我们没有定义a这个变量,但是这个程序也能继续往下运行

    2.多个异常一起处理:

    try:
        print(a)
        lo
            print('试一下异常之后的程序会不会被运行!')
    except (NameError,SyntaxError) as eor:
        print('这个的报错是: %s'%eor)
    
    这个的报错是: name 'a' is not defined
    

    这里没有定义a所以是NameError,这个异常处理也是有先后顺序的,如果在异常之后还有程序的话将不会被运行的

    a='hello'
    try:
        print(a)
        lo
            print('试一下异常之后的程序会不会被运行!')
    except (NameError,SyntaxError) as eor:
        print('这个的报错是: %s'%eor)
    
    hello
    这个的报错是: name 'lo' is not defined

    小结:
    1.异常之后的程序不会被运行;
    2.报错的信息可能一样,但是报错的类型是不一样的
    如报错信息都是'name 'lo' is not defined' 但是一个是NameError,一个是SyntaxError

    3.通用的异常处理
    有的时候我们不知道这个程序会有什么报错,这个时候我们就需要用到Execption
    这个是所有的报错都是它的子类,它就包括了所有的报错

    try:
        print(a)
    except Exception as err:
        print(err)
    
    name 'a' is not defined

    4.如果我们的程序没有异常就执行某个语句,用else

    try:
        print('a')
    except NameError as err:
        print('这个是NameError语法错误!')
    except SyntaxError as err:
        print('这个是SyntaxError语法错误!')
    else:
        print('这个没错!')
    
    a
    这个没错!

    5.无论如何都会执行的finally

    try:
        print('hello')
    except NameError:
        print('这个是NameError!')
    except SyntaxError:
        print('这个是SyntaxError!')
    finally:
        print('我可不管是对是错我都会执行的!')
    
    hello
    我可不管是对是错我都会执行的!

    6.异常处理中抛出的异常
    这个的定义就是,程序在运行的过程中可能会出现的异常,我们对着异常进行处理之后(比如记录下来),然后再把这个异常正常的抛出来!

    def exce(a,b):
        try:
            return a/b
        except Exception as result:
            print('我这里记录下了错误,错误是 --->%s'%result)
            print('我这里直接抛出了异常')
            raise
    exce(5,0)
    
    我这里记录下了错误,错误是 --->division by zero
    Traceback (most recent call last):
    我这里直接抛出了异常
      File "C:/Users/huxia/Desktop/py_script/28/temp.py", line 427, in <module>
        exce(5,0)
      File "C:/Users/huxia/Desktop/py_script/28/temp.py", line 422, in exce
        return a/b
    ZeroDivisionError: division by zero

    如果我不抛出异常就没问题了

    def exce(a,b):
        try:
            return a/b
        except Exception as result:
            print('我这里记录下了错误,错误是 --->%s'%result)
            print('我这里直接抛出了异常')
            #raise
    exce(5,0)
    
    我这里记录下了错误,错误是 --->division by zero
    我这里直接抛出了异常

    7.如果有的时候我们需要选择性的抛出异常可以这样写:

    class startE:
        def __init__(self,choose):
            self.choose = choose
        def exce(self,a,b):
            try:
                return a/b
            except Exception as result:
                if self.choose:
                    print('我这里记录下了错误,错误是 --->%s'%result)
                else:
                    print('我这里直接抛出了异常')
                    raise
    print('我这里要打印错误日志')
    test = startE(True)
    test.exce(5,0)
    print('我不打印错误日志,我要抛出异常!')
    test = startE(False)
    test.exce(5,0)

    这样我们如果不需要抛出异常就为True,如果我们要抛出异常就为False

关键字

上一篇: python3学习(1)

下一篇: Python3快速入门