### 15.1.1\. 錯誤處理
當錯誤發生時,解釋器打印一個錯誤信息和堆棧跟蹤。在交互模式下,它返回主提示符;當輸入來自文件的時候,在打印堆棧跟蹤后以非零退出狀態退出。(在?try?聲明中被?except?子句捕捉到的異常在這種情況下不是錯誤。)有些錯誤是非常致命的會導致一個非零狀態的退出;這也適用于內部錯誤以及某些情況的內存耗盡。所有的錯誤信息都寫入到標準錯誤流;來自執行的命令的普通輸出寫入到標準輸出。
輸入中斷符(通常是 Control-C 或者 DEL)到主或者從提示符中慧取消輸入并且返回到主提示。[[1]](http://www.pythondoc.com/pythontutorial3/appendix.html#id7)當命令執行中輸入中斷符會引起?KeyboardInterrupt?異常,這個異常能夠被一個?try?聲明處理。
### 15.1.2\. 可執行 Python 腳本
在 BSD’ish Unix 系統上,Python 腳本可直接執行,像 shell 腳本一樣,只需要把下面內容加入到
~~~
#!/usr/bin/env python3.4
~~~
(假設 python 解釋器在用戶的?PATH?中)腳本的開頭,并給予該文件的可執行模式。#!?必須是文件的頭兩個字符。在一些系統上,第一行必須以 Unix-style 的行結束符('\n')結束,不能以 Windows 的行結束符('\r\n')。 注意?'#'?在 Python 中是用于注釋的。
使用?**chmod**?命令能夠給予腳本執行模式或者權限。
~~~
$ chmod +x myscript.py
~~~
在 Windows 系統上,沒有一個 “可執行模式” 的概念。Python 安裝器會自動地把?.py?文件和python.exe?關聯起來,因此雙擊 Python 分揀將會把它當成一個腳本運行。文件擴展名也可以是.pyw,在這種情況下,運行時不會出現控制臺窗口。
### 15.1.3\. 交互式啟動文件
當你使用交互式 Python 的時候,它常常很方便地執行一些命令在每次解釋器啟動時。你可以這樣做:設置一個名為?PYTHONSTARTUP?的環境變量為包含你的啟動命令的文件名。這跟 Unix shells 的.profile?特點有些類似。
這個文件在交互式會話中是只讀的,在當 Python 從腳本中讀取命令,以及在當?/dev/tty?被作為明確的命令源的時候不只是可讀的。該文件在交互式命令被執行的時候在相同的命名空間中能夠被執行,因此在交互式會話中定義或者導入的對象能夠無需授權就能使用。你也能在文件中更改提示sys.ps1?和?sys.ps2。
如果你想要從當前目錄中讀取一個附加的啟動文件,你可以在全局啟動文件中編寫代碼像這樣:if?os.path.isfile('.pythonrc.py'):?exec(open('.pythonrc.py').read())。如果你想要在腳本中使用啟動文件的話,你必須在腳本中明確要這么做:
~~~
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
with open(filename) as fobj:
startup_file = fobj.read()
exec(startup_file)
~~~
### 15.1.4\. 定制模塊
Python 提供兩個鉤子為了讓你們定制?sitecustomize?和?usercustomize。為了看看它的工作機制的話,你必須首先找到你的用戶 site-packages 目錄的位置。啟動 Python 并且運行這段代碼:
~~~
>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.4/site-packages'
~~~
現在你可以創建一個名為?usercustomize.py?的文件在你的用戶 site-packages 目錄,并且在里面放置你想要的任何內容。它會影響 Python 的每一次調用,除非它以?_-s_?(禁用自動導入)選項啟動。
sitecustomize?以同樣地方式工作,但是通常由是機器的管理員創建在全局的 site-packages 目錄中,并且是在?usercustomize?之前導入。請參閱?site?模塊獲取更多信息。
Footnotes
| [[1]](http://www.pythondoc.com/pythontutorial3/appendix.html#id4) | 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. 交互模式