# 16. 附錄

## 16.1. 互動模式

互動式 REPL 有兩種變體。經典的基本解釋器在所有平台上都支援，具有最低限度的行控制能力（line control capabilities）。

在 Windows 或支援 `curses` 的類似 Unix 系統上，自 Python 3.13 起預設會使用新的互動式 shell。這個 shell 支援顏色、多行編輯、歷史瀏覽和貼上模式。要停用顏色，請參閱 Controlling color 取得詳細資訊。功能鍵提供了一些額外的功能。`F1` 進入互動式幫助瀏覽器 `pydoc`。`F2` 允許瀏覽命令列歷史，既沒有輸出，也沒有 >>> 和 ... 的提示。`F3` 進入 「貼上模式」，這使得貼上較大的程式碼區塊更容易。按 `F3` 可以返回正常提示。

使用新的互動 shell 時， 請輸入 `exit` 或 `quit` 來離開 shell。不需要在這些指令後面加上呼叫括號。

如果不需要新的互動式 shell， 可以透過 `PYTHON_BASIC_REPL` 環境變數來停用它。

### 16.1.1. 錯誤處理

當一個錯誤發生時，直譯器會印出一個錯誤訊息和堆疊回溯。在互動模式下，它將返回主提示字元；當輸入來自檔案時，它在印出堆疊回溯後以非零退出狀態 (nonzero exit status) 退出。(由 `except` 子句在 `try` 陳述式中處理的例外在這種情況下不是錯誤。) 有些錯誤是無條件嚴重的，會導致非零退出狀態；這適用於內部不一致和一些記憶體耗盡的情況。所有的錯誤訊息都被寫入標準錯誤輸出；被執行指令的正常輸出被寫入標準輸出。

向主提示字元或次提示字元輸入中斷字元（通常是 `Control`-`C` 或 `Delete` ）會取消輸入並返回到主提示字元。[1] 在指令執行過程中輸入一個中斷，會引發 `KeyboardInterrupt` 例外，但可以通過 `try` 陳述式來處理。

### 16.1.2. 可執行的 Python 腳本

在類 BSD 的 Unix 系統上，Python 腳本可以直接執行，就像 shell 腳本一樣，通過放置以下這行：

    #!/usr/bin/env python3

（假設直譯器在用戶的 `PATH` 上）在腳本的開頭並給檔案一個可執行模式。`#!` 必須是檔案的前兩個字元。在某些平台上，第一行必須以 Unix 樣式的換行 (`'\n'`) 結尾，而不是 Windows (`'\r\n'`) 換行。請注意，井號 `'#'` 用於在 Python 中開始註解。

可以使用 chmod 指令為腳本賦予可執行模式或權限。

    $ chmod +x myscript.py

在 Windows 系統上，沒有「可執行模式」的概念。Python 安裝程式會自動將 `.py` 檔案與 `python.exe` 聯繫起來，這樣雙擊 Python 檔案就會作為腳本運行。副檔名也可以是 `.pyw`，在這種情況下，通常會出現的控制台視窗會被隱藏。

### 16.1.3. 互動式啟動檔案

當你互動式地使用 Python 時，每次啟動直譯器時執行一些標準指令是非常方便的。你可以通過設置一個名為 `PYTHONSTARTUP` 的環境變數來實現，該變數是一個包含啟動指令的檔案名。它的功能類似 Unix shell 的 `.profile` 。

這個檔案只在互動模式中被讀取，當 Python 從腳本中讀取指令時，此檔案不會被讀取，當 `/dev/tty` 作為指令的明確來源時也不會（否則表現得像互動模式）。它在執行互動式指令的同一命名空間中執行，因此它所定義或 import 的物件可以在互動模式中不加限定地使用。你也可以在這個檔案中改變 `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)

### 16.1.4. 客製化模組

Python 提供了兩個鉤子 (hook) 讓你可以將它客製化： sitecustomize 和 usercustomize 。要看它是如何運作的，你首先需要找到你的 site-packages 的位置。啟動 Python 並運行這段程式碼：

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

現在，你可以在該目錄中建立一個名為 `usercustomize.py` 的檔案，並將你想要的任何內容放入其中。它會影響 Python 的每次呼叫，除非它以 `-s` 選項啟動以禁用自動 import 。

sitecustomize 的運作方式相同，但通常是由電腦的管理員在全域 site-packages 目錄下建立，並在 usercustomize 之前 import 。更多細節請參閱 `site` 模組的文件。

註解

[1]

GNU Readline 套件的一個問題可能會阻止這一點。