Python中异常、捕获异常、断言、触发异常、

一、基础知识
1.1 错误和异常概念
错误:
1.语法错误:代码不符合解释器或者编译器语法
2.逻辑错误:不完整或者不合法输入或者计算出现问题
异常:执行过程中出现问题导致程序无法执行,异常是因为程序出现了错误而在正常控制流意外采取的行为。
1.首先是引起异常发生的错误
2.然后是检测(和采取可能的措施)阶段

1.2
1.3 Python标准和自定义异常
标准异常:python内建异常,程序执行前就已经存在
自定义异常:
1.python允许自定义异常,用于描述python中没有涉及的异常情况
2.自定义异常必须继承Exception类
3.自定义异常只能主动触发

1.4 python标准异常:
异常名称 ——————————————描述
BaseException :所有异常的基类
KeyboardInterrupt : 用户中断执行(通常是输入^C)
Exception :常规错误的基类
StopIteration : 迭代器没有更多的值
GeneratorExit : 生成器(generator)发生异常来通知退出
SystemExit : Python 解释器请求退出
StandardError : 所有的内建标准异常的基类
ArithmeticError : 所有数值计算错误的基类
FloatingPointError : 浮点计算错误
OverflowError : 数值运算超出最大限制
ZeroDivisionError : 除(或取模)零 (所有数据类型)
AssertionError : 断言语句失败
AttributeError : 对象没有这个属性
EOFError :没有内建输入,到达EOF 标记
EnvironmentError : 操作系统错误的基类
IOError :输入/输出操作失败
OSError :操作系统错误
WindowsError: 系统调用失败
ImportError:导入模块/对象失败
LookupError 无效数据查询的基类
IndexError 序列中没有没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError 缩进错误
TabErrorTab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeError: Unicode 解码时的错误
UnicodeEncodeError: Unicode 编码时错误
UnicodeTranslateError:Unicode 转换时错误
Warning::警告的基类
DeprecationWarning:关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

二、 捕获异常
2.1 try-except 语句
——定义了进行异常监控的一段代码,并且提供了处理异常的机制。
try-except:异常处理
try:
try_suite
except Exception [, e]:
exception_block
1.try用来捕获try_suite中的错误,并且将错误交给except处理
2.except用来处理异常,如果异常处理和设置捕获异常一致,使用exception_block处理异常
——把多个except语句连接在一起,处理一个try块中可能发生的多种异常。
1)try-except:处理多个异常
try:
try_suite
except Exception1 [e]:
exception_block1
except Exception2 [e]:
exception_block2
except ExceptionN [e]:
exception_blockN

2)try-except–else使用(如果没有异常,执行else语句中的代码)
try:
try_suite
except Exception1 [e]:
exception_block1
else:
none_exception
—— finally子句是无论是否检测到异常,都会执行的一段代码。可以丢掉except子句和else子句,单独使用try…finally,也可以配合except等使用。作用:为异常处理事件提供清理机制,用来关闭文件或者释放系统资源
1)try-finally语句:
try:
try_suite
finally:
do_finally
1.如果try语句没有捕获错误,代码执行do_finally语句
2.如果try语句捕获错误,程序首先执行do_finally语句,然后将捕获到的错误交给python解释器处理

2)try-except-finally使用:
try:
try_suite
except:
do_except
finally:
do_finally
1.若try语句没有捕获异常,执行完try代码段后,执行finally
2.若try捕获异常,首先执行except处理错误,然后执行finally

3)try-except-else-finally使用:
try:
try_suite
except:
do_except
else:
do_else
finally:
do_finally
1.若try语句没有捕获异常,执行完try代码块后,执行else代码块,最后执行finally
2.若try捕获异常,首先执行except处理错误,然后执行finally

三 、断言、触发异常
3.1 断言(assert):是一句必须等价于布尔值为真的判定,发生异常也意味着表达式为假
assert expression[,reason]
执行该语句的时候,先判断表达式expression,如果表达式为真,则什么都不做;如果表达式不为真,则抛出异常。assert异常也可以被try块捕获。

3.2 触发异常
即主动引发异常,执行raise语句,Python会创建指定的异常类的一个对象,raise语句还可以对异常对象进行初始化的参数。
raise [SomeException [, args [,traceback]]
第一个参数,SomeException必须是一个异常类,或异常类的实例
第二个参数是传递给SomeException的参数,必须是一个元组。这个参数用来传递关于这个异常的有用信息。
第三个参数traceback很少用,主要是用来提供一个跟踪记录对象(traceback)

四 、异常和sys模块、上下文管理
4.1 异常和sys模块
另一种获取异常信息的途径是通过sys模块中的exc_info()函数。该函数回返回一个三元组:(异常类,异常类的实例,跟踪记录对象)
4.2 上下文管理(with语句)
with context [as var]:
with_suite
1.with语句用来代替try-except-finally语句,是代码更加简洁;
2.context表达式返回是一个对象;
3.var用来保存context返回对象,单个返回值或者元祖;
4.with_suite使用var变量来对context返回对象进行操作

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值