python异常

python异常


常见的异常种类

AssertionError断言语句(assert)失败
AttributeError尝试访问未知的对象属性
EOFError用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError浮点计算错误
GeneratorExitgenerator.close()方法被调用的时候
ImportError导入模块失败的时候
IndexError索引超出序列的范围
KeyError字典中查找一个不存在的关键字
KeyboardInterrupt用户输入中断键(Ctrl+c)
MemoryError内存溢出(可通过删除对象释放内存)
NameError尝试访问一个不存在的变量
NotImplementedError尚未实现的方法
OSError操作系统产生的异常(例如打开一个不存在的文件)
OverflowError数值运算超出最大限制
ReferenceError弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError一般的运行时错误
StopIteration迭代器没有更多的值
SyntaxErrorPython的语法错误
IndentationError缩进错误
TabErrorTab和空格混合使用
SystemErrorPython编译器系统错误
SystemExitPython编译器进程被关闭
TypeError不同类型间的无效操作
UnboundLocalError访问一个未初始化的本地变量(NameError的子类)
UnicodeErrorUnicode相关的错误(ValueError的子类)
UnicodeEncodeErrorUnicode编码时的错误(UnicodeError的子类)
UnicodeDecodeErrorUnicode解码时的错误(UnicodeError的子类)
UnicodeTranslateErrorUnicode转换时的错误(UnicodeError的子类)
ValueError传入无效的参数
ZeroDivisionError除数为零

try - except语句

类似于java的try-catch语句,用于异常的检测与处理,语法为

try:
	检测范围
except Exception [as reason]:
	出现异常Exception时的处理代码

其中 Exception 是异常种类,如果缺省,则默认是所有种类,且不能加as reason;reason是错误的信息或者说是原因,是对应异常的类的对象,可以转换为String类型来输出。

一个try可以对应多个except

当try中出现异常时,会直接跳到except部分寻找对应的异常处理,执行处理代码,若没有找到对应的异常处理,则会报错

except后面也可以跟一个异常类组成的元组,对这个元组里所有的异常种类执行相同的操作;当抛出的异常属于该元组的元素时,执行这段异常处理代码。例如

try:
    x = 1 + '2'
    y = 2 / 0
except (ZeroDivisionError,TypeError) as reason:
    print('出错了:'+str(reason))# 出错了:unsupported operand type(s) for +: 'int' and 'str'

try:
    y = 2 / 0
    x = 1 + '2'
except (ZeroDivisionError,TypeError) as reason:
    print('出错了:'+str(reason))# 出错了:division by zero

带finally的try - except语句

和java的finally语句一样,其语法规则为

try:
	检测范围
except Exception [as reason]:
	出现异常Exception时的处理代码
finally:
    无论如何都会执行的代码

在绝大多数情况下,只要执行了try,finally里的代码都会执行,即使try中有return语句,或者sys.exit(0)退出程序,finally里的代码也会执行,例如

import sys
import os
def fun1():
    try:
        return
        int('ab')
    except ValueError as reason:
        print(type(reason))
    finally:
        print('执行了finally语句')
def fun2():
    try:
        sys.exit(0)
        int('ab')
    except ValueError as reason:
        print(type(reason))
    finally:
        print('执行了finally语句')
fun1()
fun2()
# output:
# 执行了finally语句
# 执行了finally语句

但当使用os._exit(0)关闭重启整个shell时,则finally不会执行,例

import sys
import os
def fun1():
    try:
        os._exit(0)
        int('ab')
    except ValueError as reason:
        print(type(reason))
    finally:
        print('执行了finally语句')
fun1()

raise

用于手动抛出异常,用法如下

raise [ExceptionName[(reason)]]

其中ExceptionName表示异常类型,而reason表示异常所携带的信息,通常是原因,两个参数都可缺省

也就是说,raise 语句有如下三种常用的用法:

  • raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
  • raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
  • raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。

例如:

 raise ZeroDivisionError("除数不能为零")

参考网站:http://c.biancheng.net/view/2360.html


assert断言

raise类似,使用更加方便,但不够灵活,可用于单元测试,参数合法判断等,语法如下

assert 布尔表达式[, 错误信息]

当布尔表达式为True时,程序继续运行,否则,抛出AssertionError异常,并携带错误信息,例如

assert a<0, 'a不能小于0'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值