[TOC]
*****
Python使用被稱為異常的特殊對象來管理**程序執行期間發生的錯誤**。每當發生讓Python不知 所措的錯誤時,它都會創建一個異常對象。如果你編寫了處理該異常的代碼,程序將繼續運行;
如果你未對異常進行處理,程序將停止,并顯示一個traceback,其中包含有關異常的報告。
異常是使用try-except代碼塊處理的。 try-except代碼塊讓Python執行指定的操作,同時告訴Python發生異常時怎么辦。使用了try-except代碼塊時,即便出現異常,程序也將繼續運行:顯示你編寫的友好的錯誤消息,而不是令用戶迷惑的traceback。
## 10.3.1 處理 ZeroDivisionError 異常

## 10.3.2 使用 try-except 代碼塊

## 10.3.3 使用異常避免崩潰
如果用戶懷有惡意,他會通過traceback獲悉你不希望他知道的信息。例如,他將知道你的程序文件的名稱,還將看到部分不能正確運行的代碼。有時候,訓練有素的攻擊者可根據這些信息判斷出可對你的代碼發起什么樣的攻擊
## 10.3.4 else 代碼塊

try-except-else代碼塊的工作原理大致如下:有可能引發異常的代碼才需要放在try語句中。有一些僅在try代碼塊成功執行時才需要運行的代碼;這些代碼應放在else代碼塊中。 except代碼塊處理運行try代碼塊時發生的異常。
## 10.3.5 處理 FileNotFoundError 異常
使用文件時,一種常見的問題是找不到文件:你要查找的文件可能在其他地方、文件名可能
不正確或者這個文件根本就不存在。對于所有這些情形,都可使用try-except代碼塊以直觀的方
式進行處理。

處理open函數導致的錯誤

## 10.3.6 分析文本
方法split()以空格為分隔符將字符串分拆成多個部分,并將這些部分都存儲到一個列表中。

```
#計算該篇小說含有多少個單詞
filename = 'alice.txt'
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError as e:
msg = "Sorry, the file " + filename + " does not exist."
print(msg)
else:
words = contents.split()
num_words = len(words)
print("The file " + filename + " has about " + str(num_words) + " words.")
```
## 10.3.8 失敗時一聲不吭
有時候你希望程序在發生異常時一聲不吭,就像什么都沒有發生一樣繼續運行。
Python有一個pass語句,可在代碼塊中使用它來讓Python什么都不要做:

pass語句還充當了占位符,它提醒你在程序的某個地方什么都沒有做,并且以后也許要在這
里做些什么。例如,在這個程序中,我們可能決定將找不到的文件的名稱寫入到文件
missing\_files.txt中。用戶看不到這個文件,但我們可以讀取這個文件,進而處理所有文件找不到
的問題。
## 10.3.9 決定報告哪些錯誤
憑借經驗可判斷該在程序的什么地方包含異常處理塊,以及出現錯誤時該向用戶提供多少相關的信息