python异常处理

异常是程序错误的信号,用于增强程序的健壮性。本文介绍了什么是异常,异常的分类,为何进行异常处理,如何使用try...finally进行异常处理,主动触发异常的raise用法,断言以及自定义异常的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录:
  1. 什么是异常?
  2. 为何要进行异常处理
  3. 如何进行异常处理
  4. 主动触发异常raise
  5. 断言
  6. 自定义异常

什么是异常?

  • 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制,那么该错误就会产生一个异常抛出来,程序的运行也随之终止

例如:

print('start')
x = 1
y = 2
if 
print('end')  # 程序一句也不会运行直接报错,运行前会先检测语法

异常分为三部分

  1. 异常的类型(一个个的类)
  2. 异常的内容、提示信息
  3. 异常的追踪/定位信息信息

异常的分类:

  • 语法上的错误(如上例)

  • 逻辑上的错误

  # NameError
  age = 12
  a
  # IndexError
  l = [1,2,3]
  l[123]
  # KeyError
  d = {'name':'jason'}
  d['password']

回到目录

为何要进行异常处理

  • 增强程序的健壮性

如何进行异常处理

  • 语法:
try
	...
except
	...
  • 示例:
#针对逻辑上的异常才应该使用try...except去捕捉异常进行处理
#1、异常的单分支(单个except)
#2、异常的多分支(多个except)
#3、万能异常:Exception,可以匹配所有种类的异常(挨个注释挨个尝试)
#4、多分支+Exception,注意Exception一定要放到except 其他异常的的后面
#5、try...else,else会在被检测的代码块没有异常发生的情况下执行, else一定要与except连用,并且一定要放到多个except后面

try:
    d = {'name': 'jason'}
    d['password']
    # a = 1
    # x
    # l = [1,2,3,4]
    # l[123]
    print('haha')
    pass
except Exception as e:
    print(e)
else:
    print('当try里面的代码没有报错的情况下走else')
finally:
    print('无论前面有没有报错 我都会执行')

try…finally,finally的代码,无论被检测的代码有无异常,都会执行,通常在finally内做一些回收资源的事情,例如:

try:
    f = open('a.txt','w',encoding='utf-8')
    f.read()
finally:
    f.close()
print('other...')

回到目录

主动触发异常raise 异常类型(’异常的内容‘)

  • 应用于程序中自定义某种法则,一旦不遵循则会像抛出语法异常一样,终止程序的运行
class People:
    def __init__(self,name):
        if not isinstance(name,str):
            raise TypeError('%s must be str type'%name)
        self.name = name

断言

  • 当assert条件不满足是抛出AssertionError,提示信息
l = [1, 2, 3]
#正常运行
assert len(l) > 2
l = [1, 2]
#报错
assert len(l)>2,"l范围小于三"

自定义异常

class MyError(BaseException):
     def __init__(self,msg):
         super().__init__()
         self.msg=msg
     def __str__(self):
         return '<%s>' %self.msg
  • raise MyError(‘我自己定义的异常’) # 主动抛出异常其实就是将异常类的对象打印出来,会走__str__方法

回到目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值