python常見異常

2022-06-29 18:09:12 字數 3871 閱讀 3180

目錄

1.2 異常

python 中的錯誤有兩種,語法錯誤和邏輯錯誤

這種錯誤是我們應該避免的

python中的異常是程式執行過程中產生的,有異常不一定要把程式停止,只要把異常丟擲,然後檢視異常產生的原因即可。

1.2.1 python中的異常種類

attributeerror 試圖訪問乙個物件沒有的屬性,比如foo.x,但是foo沒有屬性x

ioerror 輸入/輸出異常;基本上是無法開啟檔案

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

nameerror使用乙個還未被賦予物件的變數

typeerror 傳入物件型別與要求的不符合

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,

導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

## 2 異常處理

>

python直譯器檢測到錯誤,觸發異常,程式設計師編寫特定的**,專門用來捕捉這個異常(這段**與程式邏輯無關,與異常處理有關)如果捕捉成功則進入另外乙個處理分支,執行你為其定製的邏輯,使程式不會崩潰,這就是異常處理

### 2.1 python 的異常處理機制

```python

try:

被檢測的**塊

except 異常型別:

try中一旦檢測到異常,就執行這個位置的邏輯

'>attributeerror 試圖訪問乙個物件沒有的屬性,比如foo.x,但是foo沒有屬性x

ioerror 輸入/輸出異常;基本上是無法開啟檔案

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

nameerror使用乙個還未被賦予物件的變數

typeerror 傳入物件型別與要求的不符合

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,

導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

## 2 異常處理

>

python直譯器檢測到錯誤,觸發異常,程式設計師編寫特定的**,專門用來捕捉這個異常(這段**與程式邏輯無關,與異常處理有關)如果捕捉成功則進入另外乙個處理分支,執行你為其定製的邏輯,使程式不會崩潰,這就是異常處理

### 2.1 python 的異常處理機制

```python

try:

被檢測的**塊

except 異常型別:

try中一旦檢測到異常,就執行這個位置的邏輯

下面的except就是相當於if,但是不能把所有的的錯誤用except,於是就有了exception

try:

print("====")

print(x)

except keyerror as x: # 命名錯誤

print(x) # 把錯誤的內容傳遞給x

except nameerror as y:

print(y)

'>try:

print("====")

print(x)

except keyerror as x: # 命名錯誤

print(x) # 把錯誤的內容傳遞給x

except nameerror as y:

print(y)

exception 萬能異常

x = 1

try:

print(x)

except exception as e: # 都能處理異常

print(e)

else:

# pass

print("hello") # try內**塊沒有異常則執行我

finally:

# pass

print("都會執行") # 通常用於清理工作,比如關閉資料連線

'>x = 1

try:

print(x)

except exception as e: # 都能處理異常

print(e)

else:

# pass

print("hello") # try內**塊沒有異常則執行我

finally:

# pass

print("都會執行") # 通常用於清理工作,比如關閉資料連線

主動丟擲異常

try:

raise typeerror('型別錯誤')

except exception as e:

print(e)

">try:

raise typeerror('型別錯誤')

except exception as e:

print(e)

自定義異常

class abcexception(baseexception):  # 這裡是繼承baseexception

def __init__(self,msg):

self.msg=msg

def __str__(self):

return self.msg

try:

raise abcexception('型別錯誤')

except abcexception as e:

print(e)

">classabcexception(baseexception): # 這裡是繼承baseexception

def__init__(self,msg):

self.msg=msg

def__str__(self):

return self.msg

try:

raise abcexception('型別錯誤')

except abcexception as e:

print(e)

斷言

assert 1 == 1

assert 1 == 2

'>assert 1 == 1

assert 1 == 2

try..except的方式比較if的方式的好處

try..except這種異常處理機制就是取代if那種方式,讓你的程式在不犧牲可讀性的前提下增強健壯性和容錯性

異常處理中為每乙個異常定製了異常型別(python中統一了類與型別,型別即類),對於同一種異常,乙個except就可以捕捉到,可以同時處理多段**的異常(無需『寫多個if判斷式』)減少了**,增強了可讀性

使用try..except的方式

把錯誤處理和真正的工作分開來

**更易組織,更清晰,複雜的工作任務更容易實現;

毫無疑問,更安全了,不至於由於一些小的疏忽而使程式意外崩潰了;

什麼時候用異常處理

try…except應該盡量少用,因為它本身就是你附加給你的程式的一種異常處理的邏輯,與你的主要的工作是沒有關係的

這種東西加的多了,會導致你的**可讀性變差

Python常見異常

python中常見的異常 異常描述 baseexception 所有異常的基類 exception 常規錯誤的基類 nameerror 嘗試訪問乙個沒有申明的變數引發的錯誤 indexerror 索引超出序列範圍引發的錯誤 indentationerror 縮排錯誤 valueerror 傳入的值錯...

常見的Python異常

異常 描述assertionerror assert 斷言 語句失敗 attributeerror 試圖訪問乙個物件沒有的屬性,比如foo.x,但是foo沒有屬性x ioerror 輸入 輸出異常 基本上是無法開啟檔案 importerror 無法引入模組或者包 基本上是路徑問題 indentati...

常見的python異常

assertionerror assert 斷言 語句失敗 attributeerror 試圖訪問乙個物件沒有的屬性 ioerror 輸入輸出異常,基本是無法開啟檔案 importerror 無法匯入模組或包,基本是路徑問題 indentationerror 無法錯誤,沒有正確的對齊 indexer...