## 引言
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。
* 异常处理
* 断言(Assertions)
## 基本语法
~~~
try:
可能发生异常的代码
except 异常错误的类型 as e: #e表示用来接受异常错误原因
pass #可以在此处打印提示人们错误原因
~~~
## 异常种类
### 常见异常
~~~
AttributeError 试图访问一个对象没有的属性
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误的子类,缩进错误
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python语法错误
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
~~~
### 更多异常
```
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
```
## 异常处理
一般情况下,如果我们对即将运行的代码有可能出现异常的担忧,可以使用异常处理来运行我们代码,但是在捕获异常时最好能够具体写清楚异常的类型。如果可能出现多种异常,可以使用if判断,也可以把异常类型放在一起写成元祖的形式(但是这样的话没法具体指导是哪一种异常报错),也可以将Exception这个万能异常放在判断的最后,以防出现了我们没有捕获到的异常。
~~~
s1 = 'hello'
try:
int(s1)
except IndexError as e:
print('出现了以下错误', e)
except KeyError as e:
print('出现了以下错误', e)
except ValueError as e:
print('出现了以下错误', e)
except Exception as e:
print('出现了以下错误', e)
~~~
~~~
s1 = 'hello'
try:
int(s1)
except (IndexError,ValueError,KeyError) as e:
print('出现了以下错误', e)
except Exception as e:
print('出现了以下错误', e)
~~~
### 其他异常结构
~~~
try:
# 主代码块
pass
except KeyError as e:
# 异常时,执行该块
pass
else:
# 主代码正常执行完,执行该块,如出现异常,不执行该块
pass
finally:
# 无论异常与否,最终执行该块
pass
~~~
### 主动触发异常
~~~
try:
raise Exception('错误了。。。')
except Exception as e:
print(e)
~~~
### 自定义异常
~~~
class WusirException(Exception):
def __init__(self, msg):
self.message = msg
try:
raise WusirException('这是我自定义的异常')
except WusirException as e:
print(e)
~~~
- Python学习
- Python基础
- Python初识
- 列表生成式,生成器,可迭代对象,迭代器详解
- Python面向对象
- Python中的单例模式
- Python变量作用域、LEGB、闭包
- Python异常处理
- Python操作正则
- Python中的赋值与深浅拷贝
- Python自定义CLI三方库
- Python并发编程
- Python之进程
- Python之线程
- Python之协程
- Python并发编程与IO模型
- Python网络编程
- Python之socket网络编程
- Django学习
- 反向解析
- Cookie和Session操作
- 文件上传
- 缓存的配置和使用
- 信号
- FBV&&CBV&&中间件
- Django补充
- 用户认证
- 分页
- 自定义搜索组件
- Celery
- 搭建sentry平台监控
- DRF学习
- drf概述
- Flask学习
- 项目拆分
- 三方模块使用
- 爬虫学习
- Http和Https区别
- 请求相关库
- 解析相关库
- 常见面试题
- 面试题
- 面试题解析
- 网络原理
- 计算机网络知识简单介绍
- 详解TCP三次握手、四次挥手及11种状态
- 消息队列和数据库
- 消息队列之RabbitMQ
- 数据库之Redis
- 数据库之初识MySQL
- 数据库之MySQL进阶
- 数据库之MySQL补充
- 数据库之Python操作MySQL
- Kafka常用命令
- Linux学习
- Linux基础命令
- Git
- Git介绍
- Git基本配置及理论
- Git常用命令
- Docker
- Docker基本使用
- Docker常用命令
- Docker容器数据卷
- Dockerfile
- Docker网络原理
- docker-compose
- Docker Swarm
- HTML
- CSS
- JS
- VUE