异常处理

阅读目录:

单分支处理多个异常

l = ['选课','创建学生','退出']
try:
    num = int(input('>>>'))
    print(l[num - 1])
except (ValueError,IndexError):  # 你处理的是一个valueError
    print('您输入的内容不合法')
执行结果:

>>>123
您输入的内容不合法

多分支处理

l = ['选课','创建学生','退出']
try:
    num = int(input('>>>'))
    print(l[num - 1])
except ValueError:  # 你处理的是一个valueError
    print('请输入一个数字')
except IndexError:
    print('您输入的数字无效')

执行结果:

>>>安不上
请输入一个数字

>>>123
您输入的数字无效

as 语句

使用as语句得到一个错误信息的变量,使用这个变量,就可以知道错误的具体信息

l = ['选课','创建学生','退出']
try:
    num = int(input('>>>'))
    print(l[num - 1])
except (ValueError,IndexError) as exp:  
    print('您输入的内容不合法')
    print('悄悄记录在文件里,不要被用户发现',type(exp),exp)

执行结果:

>>>123
您输入的内容不合法
悄悄记录在文件里,不要被用户发现 <class 'IndexError'> list index out of range

万能异常

能够处理所有的异常

所有的异常处理应该用最基础的最贴近的异常类型去处理它,而不应该乱用万能异常

def func():
    name

def main():
    func()
try:
    main()
except Exception as e:
    print('报错了',e)
执行结果:
报错了 name 'name' is not defined

如果万能异常和其他异常相遇了 : 万能异常永远写在多分支异常的最后

l = ['选课','创建学生','退出']
try:
    num = int(input('>>>'))
    print(l[num - 1])
    a
    import times
except ValueError:  # 你处理的是一个valueError
    print('请输入一个数字')
except IndexError:
    print('您输入的数字无效')
except Exception:
    print('万能异常')
执行结果:

>>>1
选课
万能异常

else

如果try中的代码没有异常的顺利执行了,就执行else中的代码

 

l = ['选课','创建学生','退出']
try:
    num = int(input('>>>'))
    print(l[num - 1])
except ValueError:  # 你处理的是一个valueError
    print('请输入一个数字')
except IndexError:
    print('您输入的数字无效')
else:
    print('执行我啦')

执行结果:
>>>2
创建学生
执行我啦

finnaly 

无论如何都会执行 关闭文件\归还系统资源(网络上连接\数据库连接)

遇到return \遇到程序报错结束 都会先执行finally,再return或者报错停止运行

 

l = ['选课','创建学生','退出']
try:
    num = int(input('>>>'))
    print(l[num - 1])
except ValueError:  # 你处理的是一个valueError
    print('请输入一个数字')
except IndexError:
    print('您输入的数字无效')
else:
    print('执行我啦')
finally:          # 无论如何都会执行
    print('finally')

执行结果:
>>>123
您输入的数字无效
finally

 

def func():
    try:
        f = open('file','r')
        ret = f.read()
        return ret
    except Exception:
        print('报错啦')
    finally:
        f.close()            #当我们操作一个文件的时候及时遇到了报错,但是也要把打开的文件进行关闭
        print('closed')     
print(func())

raise 

try:
    f = open('file', 'w')
    ret = f.read()
finally:
    f.close()
    print('closed')
raise ImportError
raise 错误类型

什么时候用自定义异常???

class NoCourse(BaseException):
    def __str__(self):
        return '没有这个课程'
raise NoCourse()

执行结果:
__main__.NoCourse: 没有这个课程

assert

assert bool/条件 如果是False就报错,如果是True就继续执行

if 'name' == 'alex' and 'pwd' == 'sb':
    ...
    ...
    ...
else:
    print('如果if条件不满足可以干点儿别的')

assert 'name' == 'alex' and 'pwd' == 'sb'  # 这是一个必须满足的条件
...
...
...

 

posted @ 2019-02-07 21:20  小萍瓶盖儿  阅读(99)  评论(0编辑  收藏  举报