python异常处理

python异常处理

一、异常处理

  • 程序在运行过程当中,不可避免的会出现一些错误(我们称其为异常),比如:使用了没有赋值过的变量、使用了不存在的索引、除数为0…

  • 程序运行过程中,一旦出现异常将会导致程序立即终止,异常以后的代码全部都不会执行!

1.1、异常处理

程序运行时出现异常,我们可以编写代码(使用try,except,else,finally,raise)来对异常进行处理目的

异常类:Exception(所有异常的父类),子异常类包括IndexError(索引异常)、ZeroDivisionError(除0异常)等

  • try:将可能出错的代码放入到try语句,必不可少

    • 如果代码有错误,则会执行except语句;
    • 如果代码没有错误,则会跳过except语句,执行后面的语句;
  • except:如果出现错误,则会执行expect子句中的代码

    • 如果except后不跟任何的内容(与后跟Exception效果相同),此时会捕获到所有的异常
    • 如果在except后跟着一个特定的异常类型,那么此时只会捕获该类型的异常
      • 可以在异常类后边跟着一个 as xx 作为异常的别名,此时xx就是异常对象
    • raise:抛出异常,方便自定义异常信息
  • else:没出错时要执行的语句,可有可无

  • finally:该代码块总会执行,可有可无**(需要进行资源释放时,一般设置该语句)**

注意:except和finally至少要有一个 ,一般为except

print('异常出现前')

l = []
try:
    # print(c)	# 出现 NameError 异常
    # l[10]	# 出现 IndexError 异常
    # 1 + 'hello'	# 未知异常 unsupported operand type(s) for +: 'int' and 'str' <class 'TypeError'>
    print(10/0)	# 出现 ZeroDivisionError 异常
except NameError:
    print('出现 NameError 异常')
except ZeroDivisionError:
    print('出现 ZeroDivisionError 异常')
except IndexError:
    print('出现 IndexError 异常')
except Exception as e :
    print('未知异常',e,type(e))
finally :
    print('无论是否出现异常,该子句都会执行')

print('异常出现后')

1.2、异常的传播(抛出异常)

当在函数中出现异常时

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

当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中

  • 异常传播,实际上就是异常对象抛给了调用处

使用 raise 语句抛出异常

  • raise语句后需要跟一个异常类或异常的实例
  • 可以自定义异常类(自定义异常信息),只需要创建一个类继承Exception即可
class MyError(Exception):
    pass

def add(a,b):
    # 如果a和b中有负数,就向调用处抛出异常
    if a < 0 or b < 0:
        # raise用于向外部抛出异常,后边可以跟一个异常类,或异常类的实例
        # raise Exception    
        # raise Exception('两个参数中不能有负数!')  
        raise MyError('自定义的异常')
    r = a + b
    return r

print(add(-123,456))	# __main__.MyError: 自定义的异常    
def fn():
    try:
        print('Hello fn')
        print(a)
    except Exception as e:
        raise Exception("函数fn发生异常:{}".format(e))

def fn2():
    print('Hello fn2')
    try:
        fn()
    except Exception as e:
        print("函数fn2发生异常")
        print(e)

fn2()
# 输出如下:
"""
Hello fn2
Hello fn
函数fn2发生异常
函数fn发生异常:name 'a' is not defined
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值