### 2.2.1\. 錯誤處理
有錯誤發生時,解釋器打印一個錯誤信息和棧跟蹤器。交互模式下,它返回主提示符,如果從文件輸入執行,它在打印棧跟蹤器后以非零狀態退出。異常可以由?try?語句中的?except?子句來控制,這樣就不會出現上文中的錯誤信息)有一些非常致命的錯誤會導致非零狀態下退出,這由通常由內部矛盾和內存溢出造成。所有的錯誤信息都寫入標準錯誤流;命令中執行的普通輸出寫入標準輸出。
在主提示符或附屬提示符輸入中斷符(通常是 Control-C 或者 DEL)就會取消當前輸入,回到主命令行。[[2]](http://www.pythondoc.com/pythontutorial3/interpreter.html#id13)?執行命令時輸入一個中斷符會拋出一個?KeyboardInterrupt?異常,它可以被?try?句截獲。
### 2.2.2\. 執行 Python 腳本
BSD 類的 Unix 系統中,Python 腳本可以像 Shell 腳本那樣直接執行。只要在腳本文件開頭寫一行命令,指定文件和模式:
~~~
#! /usr/bin/env python3.3
~~~
(要確認 Python 解釋器在用戶的?PATH?中)?#!?必須是文件的前兩個字符,在某些平臺上,第一行必須以 Unix 風格的行結束符(?'n'?)結束,不能用 Windows(?'rn'?)的結束符。注意,'#'?是 Python 中是行注釋的起始符。
腳本可以通過?**chmod**?命令指定執行模式和權限:
`$ chmod +x myscript.py`
Windows 系統上沒有“執行模式”。Python 安裝程序自動將?.py?文件關聯到?python.exe,所以在 Python 文件圖標上雙擊,它就會作為腳本執行。同樣?.pyw?也作了這樣的關聯,通常它執行時不會顯示控制臺窗口。
### 2.2.3\. 源程序編碼
默認情況下,Python 源文件是 UTF-8 編碼。在此編碼下,全世界大多數語言的字符可以同時用在字符串、標識符和注釋中 — 盡管 Python 標準庫僅使用 ASCII 字符做為標識符,這只是任何可移植代碼應該遵守的約定。如果要正確的顯示所有的字符,你的編輯器必須能識別出文件是 UTF-8 編碼,并且它使用的字體能支持文件中所有的字符。
你也可以為源文件指定不同的字符編碼。為此,在?#!?行(首行)后插入至少一行特殊的注釋行來定義源文件的編碼:
`# -*- coding: encoding -*-`
通過此聲明,源文件中所有的東西都會被當做用?_encoding_?指代的 UTF-8 編碼對待。在 Python 庫參考手冊?codecs?一節中你可以找到一張可用的編碼列表。
例如,如果你的編輯器不支持 UTF-8 編碼的文件,但支持像 Windows-1252 的其他一些編碼,你可以定義:
`# -*- coding: cp-1252 -*-`
這樣就可以在源文件中使用 Windows-1252 字符集中的所有字符了。這個特殊的編碼注釋必須在文件中的?_第一或第二_?行定義。
### 2.2.4\. 交互執行文件
使用 Python 解釋器的時候,我們可能需要在每次解釋器啟動時執行一些命令。你可以在一個文件中包含你想要執行的命令,設定一個名為?PYTHONSTARTUP?的環境變量來指定這個文件。這類似于 Unix shell 的?.profile?文件。
這個文件在交互會話期是只讀的,當 Python 從腳本中解讀文件或以終端?/dev/tty?做為外部命令源時則不會如此(盡管它們的行為很像是處在交互會話期。)它與解釋器執行的命令處在同一個命名空間,所以由它定義或引用的一切可以在解釋器中不受限制的使用。你也可以在這個文件中改變sys.ps1?和?sys.ps2?指令。
如果你想要在當前目錄中執行附加的啟動文件,可以在全局啟動文件中加入類似以下的代碼:
~~~
if?os.path.isfile('.pythonrc.py'):?execfile('.pythonrc.py')?。
~~~
如果你想要在某個腳本中使用啟動文件,必須要在腳本中寫入這樣的語句:
~~~
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
exec(open(filename).read())
~~~
### 2.2.5\. 本地化模塊
Python 提供了兩個鉤子(方法)來本地化:?sitecustomize?和?usercustomize。為了見識它們,你首先需要找到你的 site-packages 的目錄。啟動 python 執行下面的代碼:
~~~
>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.2/site-packages'
~~~
現在你可以在 site-packages 的目錄下創建?usercustomize.py?文件,內容就悉聽尊便了。這個文件將會影響 python 的每次調用,除非啟動的時候加入?_-s_?選項禁止自動導入。
sitecustomize?的工作方式一樣,但是是由電腦的管理賬戶創建以及在?usercustomize?之前導入。具體可以參見?site。
Footnotes
| [[1]](http://www.pythondoc.com/pythontutorial3/interpreter.html#id2) | 在 Unix 系統上,Python 3.1 解釋器默認未被安裝成名為 python 的命令,所以它不會與同時安裝在系統中的 Python 2.x 命令沖突。 |
| [[2]](http://www.pythondoc.com/pythontutorial3/interpreter.html#id7) | GNU Readline 包的一個問題可能禁止此功能。 |
- Python 入門指南
- 1. 開胃菜
- 2. 使用 Python 解釋器
- 2.1. 調用 Python 解釋器
- 2.2. 解釋器及其環境
- 3. Python 簡介
- 3.1. 將 Python 當做計算器
- 3.2. 編程的第一步
- 4. 深入 Python 流程控制
- 4.1. if 語句
- 4.2. for 語句
- 4.3. range() 函數
- 4.4. break 和 continue 語句, 以及循環中的 else 子句
- 4.5. pass 語句
- 4.6. 定義函數
- 4.7. 深入 Python 函數定義
- 4.8. 插曲:編碼風格
- 5. 數據結構
- 5.1. 關于列表更多的內容
- 5.2. del 語句
- 5.3. 元組和序列
- 5.4. 集合
- 5.5. 字典
- 5.6. 循環技巧
- 5.7. 深入條件控制
- 5.8. 比較序列和其它類型
- 6. 模塊
- 6.1. 深入模塊
- 6.2. 標準模塊
- 6.3. dir() 函數
- 6.4. 包
- 7. 輸入和輸出
- 7.1. 格式化輸出
- 7.2. 文件讀寫
- 8. 錯誤和異常
- 8.1. 語法錯誤
- 8.2. 異常
- 8.3. 異常處理
- 8.4. 拋出異常
- 8.5. 用戶自定義異常
- 8.6. 定義清理行為
- 8.7. 預定義清理行為
- 9. 類
- 9.1. 術語相關
- 9.2. Python 作用域和命名空間
- 9.3. 初識類
- 9.4. 一些說明
- 9.5. 繼承
- 9.6. 私有變量
- 9.7. 補充
- 9.8. 異常也是類
- 9.9. 迭代器
- 9.10. 生成器
- 9.11. 生成器表達式
- 10. Python 標準庫概覽
- 10.1. 操作系統接口
- 10.2. 文件通配符
- 10.3. 命令行參數
- 10.4. 錯誤輸出重定向和程序終止
- 10.5. 字符串正則匹配
- 10.6. 數學
- 10.7. 互聯網訪問
- 10.8. 日期和時間
- 10.9. 數據壓縮
- 10.10. 性能度量
- 10.11. 質量控制
- 10.12. “瑞士軍刀”
- 11. 標準庫瀏覽 – Part II
- 11.1. 輸出格式
- 11.2. 模板
- 11.3. 使用二進制數據記錄布局
- 11.4. 多線程
- 11.5. 日志
- 11.6. 弱引用
- 11.7. 列表工具
- 11.8. 十進制浮點數算法
- 12. 接下來?
- 13. 交互式輸入行編輯歷史回溯
- 13.1. 行編輯
- 13.2. 歷史回溯
- 13.3. 快捷鍵綁定
- 13.4. 其它交互式解釋器
- 14. 浮點數算法:爭議和限制
- 14.1. 表達錯誤
- 15. 附錄
- 15.1. 交互模式