16. 附錄?
16.1. 交互模式?
16.1.1. 錯誤處理?
當發(fā)生錯誤時(shí),解釋器會(huì )打印錯誤信息和錯誤堆棧。在交互模式下,將返回到主命令提示符;如果輸入內容來(lái)自文件,在打印錯誤堆棧之后,程序會(huì )以非零狀態(tài)退出。(這里所說(shuō)的錯誤不包括 try
語(yǔ)句中由 except
所捕獲的異常。)有些錯誤是無(wú)條件致命的,會(huì )導致程序以非零狀態(tài)退出;比如內部邏輯矛盾或內存耗盡。所有錯誤信息都會(huì )被寫(xiě)入標準錯誤流;而命令的正常輸出則被寫(xiě)入標準輸出流。
將中斷字符(通常為 Control-C 或 Delete )鍵入主要或輔助提示會(huì )取消輸入并返回主提示符。 1 在執行命令時(shí)鍵入中斷引發(fā)的 KeyboardInterrupt
異常,可以由 try
語(yǔ)句處理。
16.1.2. 可執行的Python腳本?
在BSD等類(lèi)Unix系統上,Python腳本可以直接執行,就像shell腳本一樣,第一行添加:
#!/usr/bin/env python3.5
(假設解釋器位于用戶(hù)的 PATH
)腳本的開(kāi)頭,并將文件設置為可執行。 #!
必須是文件的前兩個(gè)字符。在某些平臺上,第一行必須以Unix樣式的行結尾('\n'
)結束,而不是以Windows('\r\n'
)行結尾。請注意,散列或磅字符 '#'
在Python中代表注釋開(kāi)始。
可以使用 chmod 命令為腳本提供可執行模式或權限。
$ chmod +x myscript.py
在Windows系統上,沒(méi)有“可執行模式”的概念。 Python安裝程序自動(dòng)將 .py
文件與 python.exe
相關(guān)聯(lián),這樣雙擊Python文件就會(huì )將其作為腳本運行。擴展也可以是 .pyw
,在這種情況下,會(huì )隱藏通常出現的控制臺窗口。
16.1.3. 交互式啟動(dòng)文件?
當您以交互方式使用Python時(shí),每次啟動(dòng)解釋器時(shí)都會(huì )執行一些標準命令,這通常很方便。您可以通過(guò)將名為 PYTHONSTARTUP
的環(huán)境變量設置為包含啟動(dòng)命令的文件名來(lái)實(shí)現。這類(lèi)似于Unix shell的 .profile
功能。
此文件只會(huì )在交互式會(huì )話(huà)時(shí)讀取,而非在 Python 從腳本讀取指令或是在給定 /dev/tty
為指令的明確來(lái)源時(shí)(后者反而表現得像是一個(gè)交互式會(huì )話(huà))。 該文件執行時(shí)所在的命名空間與交互式指令相同,所以它定義或導入的對象可以在交互式會(huì )話(huà)中直接使用。 你也可以在該文件中更改提示符 sys.ps1
和 sys.ps2
。
如果你想從當前目錄中讀取一個(gè)額外的啟動(dòng)文件,你可以使用像 if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())
這樣的代碼在全局啟動(dòng)文件中對它進(jìn)行編程。如果要在腳本中使用啟動(dòng)文件,則必須在腳本中顯式執行此操作:
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)
16.1.4. 定制模塊?
Python提供了兩個(gè)鉤子來(lái)讓你自定義它:sitecustomize
和 usercustomize
。要查看其工作原理,首先需要找到用戶(hù)site-packages目錄的位置。啟動(dòng)Python并運行此代碼:
>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.5/site-packages'
現在,您可以在該目錄中創(chuàng )建一個(gè)名為 usercustomize.py
的文件,并將所需內容放入其中。它會(huì )影響Python的每次啟動(dòng),除非它以 -s
選項啟動(dòng),以禁用自動(dòng)導入。
sitecustomize
以相同的方式工作,但通常由計算機管理員在全局 site-packages 目錄中創(chuàng )建,并在 usercustomize
之前被導入。有關(guān)詳情請參閱 site
模塊的文檔。
備注
- 1
GNU Readline 包的問(wèn)題可能會(huì )阻止這種情況。