## 引言
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