python_day29_异常处理

时间:2022-12-15 11:15:02
# 异常


### 什么是异常
"""
异常是程序运行过程中发生的非正常情况, 是一个错误发生时的信号

异常如果没有被正确处理的话, 将导致程序被终止, 这对于用户体验是非常差的, 可能导致严重的后果

处理异常的目的就是提高程序的健壮性

### 异常的分类

python解释器在执行代码前会先检查语法, 语法检查通过才会开始执行代码

1.
语法检测异常
作为一个合格的程序员
是不应该出现这种低级错误

2.
运行时异常

​ 已经通过语法检测, 开始执行代码, 执行过程中发生异常
称之为运行时异常

### 异常:

```python
TypeError: 'int'
object is not subscriptable
对象不能被切片
TypeError: 'list'
object is not callable
对象不能被调用
IndexError: list
index
out
of
range
索引超出范围
TypeError: 'builtin_function_or_method'
object is not iterable
对象不能被迭代
KeyError: 'xxx'
不存在这个key
FileNotFoundError: [Errno 2]
No
such
file or directory: 'xxxxx'
文件找不到
```

### 异常的组成:

```python
Traceback(most
recent
call
last):
File
"F:/python8期/课堂内容/day29/11.常见异常.py", line
22, in < module >
with open("xxxxx") as f:
FileNotFoundError: [Errno 2]
No
such
file or directory: 'xxxxx'

Traceback
是异常追踪信息
用于展示错误发生的具体位置
以及调用的过程
其中
包括了
错误发生的模块
文件路径
行号
函数名称
具体的代码

最后一行
前面是错误的类型
后面
错误的详细信息
在查找错误时
主要参考的就是详细信息

```

### 异常处理

异常发生后
如果不正确处理将导致程序终止, 我们必须应该尽量的避免这种情况发生

# 重点:

必须掌握的语法

语法:

try:

​ 可能会出现异常的代码
放到try里面

except 具体异常类型 as e:

​ 如果真的发生异常就执行except

# 如何正确处理异常

1.
当发生异常
不是立马加try
要先找出错误原因并解决它

2.
try 仅在 即使你知道为什么发生错误, 但是你却无法避免
例如
你明确告诉用户
需要一个正确文件路径
然而用户依然传入了错误的路径


socket
双方都要使用管道, 但是如果一方有由于某些原因强行关闭了, 即使你知道原因也无法避免出错
那就只能try
保证程序正常结束

总结一句话: 能不加try
就不加try

## 自定义异常类

当系统提供异常类不能准确描述错误原因时
就可以自定义异常类

继承自Exception即可

```python


class MyException(Exception):
pass


```

### 主动抛出异常:

什么时候需要主动抛出异常

​ 当我们做功能的提供者, 给外界提供一个功能接口

​ 但是使用者不按照相应的方式来使用, 或者参数类型不正确等原因, 导致功能无法正常执行时, 就应该主动抛出异常

主动抛出异常使用raise
关键字

后面可以跟任何Exception的子类
或是
对象

```python
raise MyException
raise MyException("错误具体原因!")
```

### 断言assert

断言
其实可以理解为断定的意思

即非常肯定某个条件是成立的

条件是否成立其实可以使用if来判断

其存在的目的就是
为了简化if
判断而生的

优先掌握的内容:

1.
元类中的三个方法的执行时机以及使用场景

2.
单例模式

3.
异常处理语法

4.
要注重提升解决bug能力

有什么用

如何处理

** 什么是元类 **

** 有什么用? **

** 1.
控制类的创建过程 **

** 2.
控制对象的实例化过程 **

** 如何控制 **

​ ** 控制类的创建过程
使用__init **

​ ** 控制对象的实例化过程
使用
__call
也需要调用type的__call
并返回其结果 **

​ ** `__new
会先于__init执行
在__new中必须
调用type的__new
并返回结果
` **
"""