python之异常处理

1、异常处理
1.1、什么是异常
异常是错误发生的信号,一旦程序出错就会产生一个异常
如果该异常没有被处理,该异常就会被抛出来,程序的运行随即终止

异常是由三部分组成
1、具体哪一行代码抛出的异常
2、异常的种类
   NameError: 变量名没有定义过
   IndexError: 索引不存在
   KeyError: 字典的key不存在
   AttributeError: 对象属性不存在
   ValueError: 值错误,比如类型转换int('abc')
   TypeError: 类型错误,比如字符串+整型
   ZeroDivisionError: 比如1/0
   ...
3、异常的内容信息
1.2、为何要处理异常
为了增强程序的健壮性
1.3、如何处理异常
1、针对语法错误: 应该在程序运行前立即改正
2、针对逻辑错误: 
   (1) 如果逻辑错误发生的条件是可以预知的,应该用if判断解决,预防异常
   (2) 如果逻辑错误发生的条件是不可预知的,那么异常一定会发生,考虑到程序的健壮性,我们应该处理异常,做好补救措施

try:
    代码块
except 异常的类型:
    发生异常后要执行的代码
1.4、异常注意点
# 1、异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。
try:
    print(aaa)
except ValueError as e:
    print(e)

# 2、异常的多分支
# 使用场景: 对于不同的异常我们需要定制不同的处理逻辑,那就使用多分支
msg = 'abc'
try:
    int(msg)
except KeyError as e:
    print(e)
except IndexError as e:
    print(e)
except ValueError as e:
    print(e)
except NameError as e:
    print(e)
    
# 3、万能异常exception
# 使用场景: 无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,我们可以直接使用Exception
msg = 'abc'
try:
    int(msg)
except Exception as e:
    print(e)
    
# 4、可以在多分支后接一个Exception
msg = 'abc'
try:
    int(msg)
except KeyError as e:
    print(e)
except IndexError as e:
    print(e)
except NameError as e:
    print(e)
except Exception as e:
    print(e)

# 5、异常捕获可以跟else和finally
msg = '123'
try:
    int(msg)
except KeyError as e:
    print(e)
except IndexError as e:
    print(e)
except NameError as e:
    print(e)
except Exception as e:
    print(e)
else:
    print('try内代码块没有异常的时候我就执行了')
finally:
    print('无论如何我都会执行')  # 通常做清理工作,释放系统资源等...

# 6、主动触发异常
print(111)  # 异常前的数据正常输出
raise NameError('报错了')
print(222)  # 异常后的数据不输出

# 7、自定义异常
class MyException(BaseException):
    def __init__(self, msg, x, y, z):
        self.msg = msg
        self.x = x
        self.y = y
        self.z = z

    def __str__(self):
        return '<{}:{}:{}:{}>'.format(self.msg, self.x, self.y, self.z)
raise MyException('自定义异常', 10, 11, 12)

# 8、断言:assert 条件
assert 1 == 1  
assert 1 == 2  # AssertionError
assert len([1, 2, 3]) == 2  # AssertionError
1.5、异常总结(try…except…)
1、把错误处理和真正的工作分开来
2、代码更易组织,更清晰,复杂的工作任务更容易实现
3、更安全了,不至于由于一些小的疏忽而使程序意外崩溃
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值