# try..except
我們**嘗試**讀取用戶的一段輸入。按**Ctrl-d**,看一下會發生什么。
```
>>> s = raw_input('Enter something --> ')
Enter something --> Traceback (most recent call last):
??File "<stdin>", line 1, in ?
EOFError
```
Python引發了一個稱為`EOFError`的錯誤,這個錯誤基本上意味著它發現一個不期望的 文件尾 (由**Ctrl-d**表示)
接下來,我們將學習如何處理這樣的錯誤。
我們可以使用`try..except`語句來處理異常。我們把通常的語句放在try-塊中,而把我們的錯誤處理語句放在except-塊中。
```
#!/usr/bin/python
# Filename: try_except.py
import sys
try:
????s = raw_input('Enter something --> ')
except EOFError:
????print '\nWhy did you do an EOF on me?'
????sys.exit() # exit the program
except:
????print '\nSome error/exception occurred.'
????# here, we are not exiting the program
print 'Done'
```
(源文件:[code/try_except.py](code/try_except.py))
## 輸出
```
$ python try_except.py
Enter something -->
Why did you do an EOF on me?
$ python try_except.py
Enter something --> Python is exceptional!
Done
```
## 它如何工作
我們把所有可能引發錯誤的語句放在`try`塊中,然后在`except`從句/塊中處理所有的錯誤和異常。`except`從句可以專門處理單一的錯誤或異常,或者一組包括在圓括號內的錯誤/異常。如果沒有給出錯誤或異常的名稱,它會處理 所有的 錯誤和異常。對于每個`try`從句,至少都有一個相關聯的`except`從句。
如果某個錯誤或異常沒有被處理,默認的Python處理器就會被調用。它會終止程序的運行,并且打印一個消息,我們已經看到了這樣的處理。
你還可以讓`try..catch`塊關聯上一個`else`從句。當沒有異常發生的時候,`else`從句將被執行。
我們還可以得到異常對象,從而獲取更多有個這個異常的信息。這會在下一個例子中說明。
- 版權信息
- 前言
- 本書的由來
- 本書目前的狀況
- 約定條款
- 反饋
- 值得思考的一些東西
- 第1章 介紹
- Python的特色
- 為什么不使用Perl?
- 程序員的話
- 第2章 安裝Python
- Windows?用戶
- 概括
- 第3章 最初的步驟
- 使用帶提示符的解釋器
- 挑選一個編輯器
- 使用源文件
- 可執行的Python程序
- 獲取幫助
- 概括
- 第4章 基本概念
- 數
- 字符串
- 變量
- 標識符的命名
- 數據類型
- 對象
- 邏輯行與物理行
- 縮進
- 概括
- 第5章 運算符與表達式
- 運算符
- 運算符優先級
- 表達式
- 概括
- 第6章 控制流
- if語句
- while語句
- for循環
- break語句
- continue語句
- 概括
- 第7章 函數
- 函數形參
- 局部變量
- 默認參數值
- 關鍵參數
- return語句
- DocStrings
- 概括
- 第8章 模塊
- 字節編譯的.pyc文件
- from..import語句
- 模塊的name
- 制造你自己的模塊
- dir()函數
- 概括
- 第9章 數據結構
- 列表
- 元組
- 字典
- 序列
- 參考
- 更多字符串的內容
- 概括
- 第10章 解決問題——編寫一個Python腳本
- 解決方案
- 軟件開發過程
- 概括
- 第11章 面向對象的編程
- self
- 類
- 對象的方法
- __init__方法
- 類與對象的方法
- 繼承
- 概括
- 第12章 輸入/輸出
- 儲存器
- 概括
- 第13章 異常
- try..except
- 引發異常
- try..finally
- 概括
- 第14章 Python標準庫
- sys模塊
- os模塊
- 概括
- 第15章 更多Python的內容
- 單語句塊
- 列表綜合
- 在函數中接收元組和列表
- lambda形式
- exec和eval語句
- assert語句
- repr函數
- 概括
- 第16章 接下來學習什么?
- 探索更多內容
- 概括
- 附錄A 自由/開放源碼軟件(FLOSS)
- 附錄B 關于本書
- 關于作者
- 關于譯者
- 關于簡體中文譯本
- 附錄C 修訂記錄
- 術語表