• 异常处理


    一、异常处理

      在程序运行过程中,总会遇到各种各样的错误。程序一出错就停止运行了,那我们不能让程序停止运行吧,这时候就需要捕捉异常了,通过捕捉到的异常,我们再去做对应的处理。

    下面我们先写一个函数,实现除法运算。

    def calc(a, b):
    return a / b
    print(calc(5, 1)) # 调用,没有错误,结果是5.0

    # 返回结果 5.0

    print(calc(5, 0)) # 再次调用,这时候就不对了,因为被除数不能为0,下面报了一堆错,程序停止运行了

    # 返回结果 ZeroDivisionError: division by zero

    这个时候我们就需要捕捉异常了,如果除数是0的话,就提示用户传入的参数不对,重新传入。

    捕捉异常使用try....except....关键字,就是你在写代码的时候,先要考虑到这段代码可能会出现什么样的错误,然后做对应的处理,try里面就是包含你做处理的代码,except里面就是出了某种错误的时候,我怎么去处理,下面我们改下代码,捕捉异常。

    def calc(a, b):
    try:
    res = a/b


    except ZeroDivisionError as e: # 如果是除数为0的错误,就返回除数不能为0,这个as e代表把返回错误的信息赋给e
    return res # 这个是如果没有这个异常的话,就返回结果

    return '除数不能为0!'

    print(calc(5, 0)) # 这样再调用就不会出来错误了,就返回除数不能为0这个了。

    上面就是捕捉异常,当然上面的只能捕捉到除数为0的错误,如果有别的错误就捕捉不到了;还有一个finally的用法,就是不管出不出异常都执行;try还有一个可以捕捉所有异常,还有else的用法,就是没出异常的时候怎么办,下面用代码来解释。

    def calc(a, b):
        try:  # 捕捉异常
            res = a / b
        except ZeroDivisionError as e:
            return '除数不能为0!'
        except KeyError as e:  # 捕捉KeyError这个异常,当然这段代码没用到字典,所以不会有keyerror这个错误,我只是举个例子
            return 'keyerror错误'
        except Exception as e:  # 这个是捕捉所有的异常,不管你有什么异常都可以捕捉到
            print('其他异常')
            return e  #返回错误信息
        else:  #这个else和上面的try对应的,也就是不出异常的话走这里
            print('没有出异常')
            return res
        finally:  #这个finally是不管这个段代码有没有出异常都走它
            print('出没出异常都走我这里')
     
    print(calc(5, 0))  #出除数异常了,会返回除数不能为0!和执行finally里面的代码
     
    print(calc(5, 1))  #这个没有出异常,就会走else里面的东西,返回结果,也会执行执行finally里面的代码
     
    print(calc(5, 's'))  #这个也走异常了,除数是字符串,肯定不能除,就走那个捕捉所有异常的代码了,也会执行执行finally里面的代码
    注意:else和finally模块是可有可没有的模块,可是try和except是必须要有的

    二、常见的一些异常信息:

     
     

     

  • 相关阅读:
    java进程占用CPU高的问题
    上下文切换的案例以及CPU使用率
    百度地图sdk问题 error inflating class com.baidu.mapapi.map.mapview
    Android APK反编译
    Binary XML file line #17<vector> tag requires viewportWidth > 0
    用代码实现签名
    百度地图出现UnsatisfiedLinkError: Native method not found: com.baidu...
    INSTALL_FAILED_INVALID_APK
    Android package属性、package name和Application ID三者的联系及区别
    Android使用百度定位API时获取的地址信息为null
  • 原文地址:https://www.cnblogs.com/MLing/p/7123859.html
Copyright © 2020-2023  润新知