Python的异常处理

目录

异常处理的基本语法

主动触发异常

断言

自定义异常

真正使用 try ... except ....  的位置


 

异常处理的基本语法:

try:
    被检测的代码块
except 异常类型:    #不填写异常类型则默认是 BaseException(可以接受Python解释器中已经声明的异常种类)
    try中的代码块出现了异常,就会执行这个位置的逻辑

1.如果只是使用单个 except 去接受 try 中抛出的错误,则 except 后面的填写的异常类型也必须是 try代码块中所抛出的错误类型

名称必须相同,否则 依旧会报错  。如:

try:
    a = 1/0                      # 会抛出 ZeroDivisionError 异常
except ZeroDivisionError:        #如果这个位置说明了错误类型,则必须和上方抛出的错误类型相匹配
    print("除零错误")

2.一个try 后可以跟 多个 except 。 可以接受不同的异常类型

try:
    a = a + 1        #会抛出  NameError 
    lis = [1,2,3]
    b = lis[4]        #会抛出 IndexError
except IndexError:
    print("下标越界")
except NameError:
    print("变量名未定义")

3.except 后可以不填写 错误类型 则会默认是 BaseException(万能异常接受)

4. try ...  except .... else

当try 代码块中的代码都没有抛出错误时,才会 执行 else 的代码

try:
    a = 1
    a = a + 1
    print("代码正常执行")
except NameEroor:
    print("代码出错了")
else:
    print("try的代码都没有出错")    #try的代码都正常执行没有出错,才会执行该代码块

5.try... except... finally        # 由finally 必须有 try

finally  指的是 :

  1. 无论代码中是否出现异常,该finally中的代码都会执行 。但执行顺序有区别
  2. 当try中代码正常无异常时,finally中的代码会在try的代码执行完毕后才执行
  3. 如果try中代码出现了异常,若该异常有 except 接收,则会执行完 except 中的代码后才执行finally中的代码
  4. 但是如果该异常抛出但是没有 except 去接收, 则 finally中的代码会在 错误抛出之前就执行。

就第4举例:

try:
    lis = [1,2,3]
    b = lis[4]
except NameError:   #没有except 去接受 IndexError错误
    print("111")
finally:
    print("222")


"""
222
Traceback (most recent call last):
  File "D:/BianCheng/python_test/s19/day21/demo.py", line 91, in <module>
    b = lis[4]
IndexError: list index out of range

"""

 

主动触发异常:

关键字 raise 

格式: raise 错误类型(错误提示信息)

try:
    raise TypeError("我就想你错")
except TypeError as e:
    print(e)

# 我就想你错

注: TypeError  as  e  中的 e 只是一个约定俗成的别名。。。。

print(e)   可以打印错误的具体信息

try:
    a = int("as")
except ValueError as e:
    print(e)        #打印  invalid literal for int() with base 10: 'as'

 

 

断言:

关键字  assert 

格式: assert 条件

作用: 当 条件不满足时 ,强制报错

assert 1<0

# 打印结果
Traceback (most recent call last):
  File "D:/BianCheng/python_test/s19/day21/demo.py", line 101, in <module>
    assert 1<0
AssertionError

 

自定义异常:

class EvaException(BaseException)    #建议继承 BaseException  因为该类是所有的错误类型的超类
    pass    #其实就可以
    
    """
    def __init__(self,msg):
        self.msg = msg
    
    def __str__(self):
        return self.msg
    """


try:
    raise EvaException("类型错误")
exception EvaException as e:
    print(e)


# 类型错误

 

真正使用 try ... except ....  的位置:

  1. 把错误处理和真正的工作分开来
  2. 代码更易组织,更清晰,复杂的工作任务更容易实现
  3. 不会因为一些小的疏忽使程序意外奔溃了

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值