python-异常

https://docs.python.org/3/library/exceptions.html

异常

  • 程序在运行过程中,不可避免的出现一些错误
    • 没有赋值的变量
    • 使用了不存在的索引
    • 除0
  • 这些错误在程序中,称为异常
  • 程序运行过程中,一旦出现异常将会导致程序立即终止,异常之后的代码全部不执行

处理异常

  • 程序运行出现异常,目的不是让程序直接终止
  • 在出现异常时,可以编写代码来对异常进行处理

try语句

语法:

try:
    代码块(可能出现错误的语句)
except 异常类型 [as 异常名]:
    代码块(出现错误以后的处理方式)
except 异常类型 [as 异常名]:
    代码块(出现错误以后的处理方式)
...
else:
    代码块(没出错时要执行的语句)
finally:
    代码块(该代码块总会执行)
  • 可以将可能出错的代码放入到try语句,如果代码没有错误,则会正常执行
  • 如果出现错误,则会执行expect子句中的代码
print('hello')
try:
    print(10/2)
except:
    print('出错了')
else:
    print('程序正常执行')
print('你好')
def fn():
    print('hello fn')
    print(10 / 0)

def fn2():
    print('hello fn2')
    fn()

fn2()

异常传播(抛出异常)

  • 在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会继续传播,如果函数中没有对异常进行处理,则异常会继续向函数调用处传播,直到传递到全局作用域(主模块),如果依然没有处理,则程序终止,并显示异常信息

  • 当程序运行过程中出现异常后,所有的异常信息会保存到一个专门的异常对象中,而异常传播时,实际就是异常对象抛给了调用处

  • python中提供了多个异常对象

异常对象

  • 如果except后不跟任何的内容,则会捕获到所有的异常

  • 如果在except后跟着一个异常的类型,只会捕获该类型的异常

  • Exception 是所有异常类的父类

  • 在异常类后边跟着一个 as xx , 此时xx就是异常对象

print('异常出现前')
l = []
try:
    # print(c)
    # l[10]
    # 1 + 'hello'
    print(10/0)
except NameError:
    print('出现 NameError 异常')
except ZeroDivisionError:
    print('出现 ZeroDivisionError 异常')
except Exception as e:
    print('未知异常', e)
finally:
    print('无论是否出现异常,该子句都会执行')
print('异常出现后')

抛出异常

  • 可以使用 raise 语句抛出异常

  • raise 语句后需要跟一个异常类 或 异常的实例

  • 可以自定义异常类,只需要创建一个类继承Exception即可

class MyError(Exception):
    pass

def add(a,b):
    if a < 0 or b < 0:
        raise MyError('自定义的异常')
    r = a+b
    return r

print(add(-123,456))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxingge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值