16. 附錄
********


16.1. 互動模式
==============

There are two variants of the interactive *REPL*.  The classic basic
interpreter is supported on all platforms with minimal line control
capabilities.

On Windows, or Unix-like systems with "curses" support, a new
interactive shell is used by default. This one supports color,
multiline editing, history browsing, and paste mode.  To disable
color, see Controlling color for details.  Function keys provide some
additional functionality. "F1" enters the interactive help browser
"pydoc". "F2" allows for browsing command-line history without output
nor the *>>>* and *...* prompts. "F3" enters "paste mode", which makes
pasting larger blocks of code easier. Press "F3" to return to the
regular prompt.

When using the new interactive shell, exit the shell by typing "exit"
or "quit". Adding call parentheses after those commands is not
required.

If the new interactive shell is not desired, it can be disabled via
the "PYTHON_BASIC_REPL" environment variable.


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 套件的一個問題可能會阻止這一點。
