16. 附錄?

16.1. 交互模式?

16.1.1. 錯(cuò)誤處理?

當(dāng)發(fā)生錯(cuò)誤時(shí),解釋器會(huì)打印錯(cuò)誤信息和錯(cuò)誤堆棧。在交互模式下,將返回到主命令提示符;如果輸入內(nèi)容來(lái)自文件,在打印錯(cuò)誤堆棧之后,程序會(huì)以非零狀態(tài)退出。(這里所說(shuō)的錯(cuò)誤不包括 try 語(yǔ)句中由 except 所捕獲的異常。)有些錯(cuò)誤是無(wú)條件致命的,會(huì)導(dǎo)致程序以非零狀態(tài)退出;比如內(nèi)部邏輯矛盾或內(nèi)存耗盡。所有錯(cuò)誤信息都會(huì)被寫(xiě)入標(biāo)準(zhǔn)錯(cuò)誤流;而命令的正常輸出則被寫(xiě)入標(biāo)準(zhǔn)輸出流。

將中斷字符(通常為 Control-CDelete )鍵入主要或輔助提示會(huì)取消輸入并返回主提示符。 1 在執(zhí)行命令時(shí)鍵入中斷引發(fā)的 KeyboardInterrupt 異常,可以由 try 語(yǔ)句處理。

16.1.2. 可執(zhí)行的Python腳本?

在BSD等類Unix系統(tǒng)上,Python腳本可以直接執(zhí)行,就像shell腳本一樣,第一行添加:

#!/usr/bin/env python3.5

(假設(shè)解釋器位于用戶的 PATH )腳本的開(kāi)頭,并將文件設(shè)置為可執(zhí)行。 #! 必須是文件的前兩個(gè)字符。在某些平臺(tái)上,第一行必須以Unix樣式的行結(jié)尾('\n')結(jié)束,而不是以Windows('\r\n')行結(jié)尾。請(qǐng)注意,散列或磅字符 '#' 在Python中代表注釋開(kāi)始。

可以使用 chmod 命令為腳本提供可執(zhí)行模式或權(quán)限。

$ chmod +x myscript.py

在Windows系統(tǒng)上,沒(méi)有“可執(zhí)行模式”的概念。 Python安裝程序自動(dòng)將 .py 文件與 python.exe 相關(guān)聯(lián),這樣雙擊Python文件就會(huì)將其作為腳本運(yùn)行。擴(kuò)展也可以是 .pyw ,在這種情況下,會(huì)隱藏通常出現(xiàn)的控制臺(tái)窗口。

16.1.3. 交互式啟動(dòng)文件?

當(dāng)您以交互方式使用Python時(shí),每次啟動(dòng)解釋器時(shí)都會(huì)執(zhí)行一些標(biāo)準(zhǔn)命令,這通常很方便。您可以通過(guò)將名為 PYTHONSTARTUP 的環(huán)境變量設(shè)置為包含啟動(dòng)命令的文件名來(lái)實(shí)現(xiàn)。這類似于Unix shell的 .profile 功能。

此文件只會(huì)在交互式會(huì)話時(shí)讀取,而非在 Python 從腳本讀取指令或是在給定 /dev/tty 為指令的明確來(lái)源時(shí)(后者反而表現(xiàn)得像是一個(gè)交互式會(huì)話)。 該文件執(zhí)行時(shí)所在的命名空間與交互式指令相同,所以它定義或?qū)氲膶?duì)象可以在交互式會(huì)話中直接使用。 你也可以在該文件中更改提示符 sys.ps1sys.ps2。

如果你想從當(dāng)前目錄中讀取一個(gè)額外的啟動(dòng)文件,你可以使用像 if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read()) 這樣的代碼在全局啟動(dòng)文件中對(duì)它進(jìn)行編程。如果要在腳本中使用啟動(dòng)文件,則必須在腳本中顯式執(zhí)行此操作:

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)讓你自定義它:sitecustomizeusercustomize。要查看其工作原理,首先需要找到用戶site-packages目錄的位置。啟動(dòng)Python并運(yùn)行此代碼:

>>>
>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.5/site-packages'

現(xiàn)在,您可以在該目錄中創(chuàng)建一個(gè)名為 usercustomize.py 的文件,并將所需內(nèi)容放入其中。它會(huì)影響Python的每次啟動(dòng),除非它以 -s 選項(xiàng)啟動(dòng),以禁用自動(dòng)導(dǎo)入。

sitecustomize 以相同的方式工作,但通常由計(jì)算機(jī)管理員在全局 site-packages 目錄中創(chuàng)建,并在 usercustomize 之前被導(dǎo)入。有關(guān)詳情請(qǐng)參閱 site 模塊的文檔。

備注

1

GNU Readline 包的問(wèn)題可能會(huì)阻止這種情況。