博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象之异常处理
阅读量:5863 次
发布时间:2019-06-19

本文共 2126 字,大约阅读时间需要 7 分钟。

异常:

程序运行时的错误程序中的异常处理机制:1.程序中的所有异常都会被处理2.程序中的所有异常都需要手动处理3.如果没有手动处理异常,异常会交给Python解释器处理-- 处理的方式就是打印异常信息,并停止接收器

异常信息的三部分:

1.异常的追踪信息:提示错误位置2.异常的类型:告知处理异常应该捕获什么类型3.异常的内容:告知错误信息

处理异常的语法:

try:    会出现异常的代码块except (异常类型1, 异常类型2) as 异常别名:    异常处理逻辑else:    没有出现异常会执行该分支finally:    无论是否出现异常都会执行该分支

异常语法

将可能出现异常的代码放在try分支进行检测-- 如果不出现异常,正常执行内部所有代码-- 如果出现异常会进入except分支part11.建议大家对异常处理时,一次只处理一个异常try:print(asdsdsdsdsdsdsdsdsdsdsdsdsd) # NameErrorexcept NameError: # except 后跟异常类型,如果不需要查看异常信息,可以省略异常信息print('出现了NameError异常')try:ls = [1, 2, 3, 4, 5]print(ls[10]) # IndexErrorexcept IndexError as e: # 如果想知道异常信息,用别名接收print('出现了IndexError异常: %s' % e)part22.如果无法避免一句话或是一个完整的代码结构会出现多个可能的异常,需要在一个try中提供多个exceptls = [1, 2, 3, 4, 5]ls = (1, 2, 3, 4, 5, 6)try:print(ls[5]) # IndexErrorls.append(10) # AttributeErrorexcept IndexError as e:print('出现了IndexError异常: %s' % e)except AttributeError as e:print('出现了AttributeError异常: %s' % e)try:print(ls[5]) # IndexErrorls.append(10) # AttributeErrorexcept (AttributeError, IndexError) as e:print('出现了异常: %s' % e)part33.有些异常提前无法明确,或是压根没有明确的必要,可以捕获异常的父类异常ls = [1, 2, 3, 4, 5]ls = (1, 2, 3, 4, 5, 6)try:print(ls[5]) # IndexErrorls.append(10) # AttributeErrorexcept Exception as e: # 可以通过多态的应用,捕获父类,只要抛出的是该父类的子类异常,均可以被捕获print('出现了异常: %s' % e)BaseException:所有异常的基类 | Exception:常规错误的基类part44.了了解 - try语法的else分支:当try检测的代码块没有出现异常,才会走else分支try:print(aaaa)except Exception as e:print('出现了异常', e)else:print('没有异常')part55.finally:无论是否出现异常都会执行该分支try:f = open('1.txt', 'w', encoding='utf-8')f.write(b'123')except Exception as e:print('出现了异常', e)finally:print('无论是否出现异常都会执行该分支')f.close() # 文件只要打开,不管操作是否出现异常,都需要释放文件资源

自定义异常

自定义异常的目的:想抛一个有意义的异常,但这个异常系统没有提供,自定义一个class PeopleNameError(Exception): # Exception | BaseExceptionpass可以通过__init__明确外界的错误信息接收给那个属性再在__str__中格式化外界捕获异常,打印异常信息的格式def __init__(self, msg):self.msg = msgdef __str__(self):return 'PeopleNameError: ' + self.msgdef get_name():name = input('name: ')if 'sb' in name.lower():raise PeopleNameError('人名不能有敏感词汇')return nametry:print(get_name())except PeopleNameError as e:print(e) # PeopleNameError: 人名不能有敏感词汇

 

转载于:https://www.cnblogs.com/wangtenghui/p/10816391.html

你可能感兴趣的文章
足迹地图 搜索jvectormap
查看>>
有关CSS的overflow和border-radius的那些事,你的圆角被覆盖了吗?
查看>>
005-四种常见的 POST 提交数据方式
查看>>
nginx应用总结(2)--突破高并发的性能优化
查看>>
linux安装配置SVN并设置钩子
查看>>
Flyweight享元模式(结构型模式)
查看>>
Redis全方位详解--数据类型使用场景和redis分布式锁的正确姿势
查看>>
Linux DNS 查询剖析(第四部分) | Linux 中国
查看>>
(转)azkaban job参数说明
查看>>
BZOJ4698: Sdoi2008 Sandy的卡片(后缀数组 二分)
查看>>
解析Json
查看>>
Haskell 与范畴论-函子、态射、函数
查看>>
Flask核心机制--上下文源码剖析
查看>>
开源库Magicodes.Storage正式发布
查看>>
PHP检测及判断手机登录用户是安卓或爱疯(iPhone)客户端
查看>>
Java 在PDF中添加水印——文本/图片水印
查看>>
Linux curl 命令
查看>>
centOS
查看>>
Spring MVC controller间跳转 重定向 传参
查看>>
Last Day in Autodesk
查看>>