zoukankan      html  css  js  c++  java
  • Python基础第8课-错误(异常)处理:

    错误处理:

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数 open() ,成功时返回文件描述符(就是一个整数),出错时返回 -1 。
    用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错:一旦出错,还要一级一级上报,直到某个函数可以处理该错误(比如,给用户输出一个错误信息)。
    高级语言一般都有
    错误(异常)处理机制:
    try:
    print('try...')
    r = 10 / 0
    print('result:', r)
    except ZeroDivisionError as e:
    print('except:', e)
    finally:
    print('finally...')
    print('END')
     
     
    当我们认为某些代码可能会出错时,就可以用 try 来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即 except 语句块,执行完 except 后,如果有 finally 语句块,则执行finally 语句块,至此,执行完毕。
    一般,try放你的工程代码,except放你的错误处理代码,finally放你的收尾善后代码
     
    try:
    print('try...')
    r = 10 / int('a')
    print('result:', r)
    except ValueError as e:
    print('ValueError:', e)
    except ZeroDivisionError as e:
    print('ZeroDivisionError:', e)
    else:
    print('no error!')
    finally:
    print('finally...')
    print('END')
    异常处理的逻辑:
        每异常----->结束
        有异常----->
        找异常处理的出口------> 
        找到一个出口就出,后面的不看  ------> 
        异常处理完了,收拾一下现场(比如关闭打开了的文件啊什么的)
    Python 的错误其实也是 class,所有的错误类型都继承自 BaseException ,所以在使用 except 时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。比如:
    try:
    foo()
    except ValueError as e:
    print('ValueError')
    except UnicodeError as e:
    print('UnicodeError')
    第二个 except 永远也捕获不到 UnicodeError ,因为 UnicodeError 是ValueError 的子类,如果有,也被第一个 except 给捕获了。
     
    Python 所有的错误都是从 BaseException 类派生的,所以,一般最后一个异常时BaseException的对象,确保逮住所有的异常,常见的错误类型和继承关系看这里:
     
     

    抛出错误

        python有很多自带的错误(异常),也可以自己定义异常,然后再自己程序中抛出异常
    class FooError(BaseError):
            ......
    class FooError(ValueError):
            ......
    raise
    def foo(s):
    n = int(s)
    if n==0:
    raise FooError('invalid value: %s' % s)
    return 10 / n
  • 相关阅读:
    类似Sina新浪滑动门代码
    纯CSS无JS实现灰色下拉导航菜单代码
    滑动门与选项卡互转的实现方法代码
    一款横向、竖向两个选项卡Tab一起联动的导航代码
    C#Brush的使用(转载)
    泛型学习笔记(转载)
    Application之间共享MasterPage(转载)
    ReportView学习笔记一(转载)
    BackGroundWorker学习
    加下划线的TextBox
  • 原文地址:https://www.cnblogs.com/MarmaladeCat/p/1039a7abe2a46efc58300a311599cf0c.html
Copyright © 2011-2022 走看看