16. 付録
********


16.1. 対話モード
================


16.1.1. エラー処理
------------------

エラーが発生すると、インタプリタはエラーメッセージとスタックトレース
(stack trace) を出力します。対話モードにいるときは、インタプリタは一次
プロンプトに戻ります; スクリプトをファイルから実行しているときは、イン
タプリタはスタックトレースを出力した後、非ゼロの終了ステータスで終了し
ます。 ("try" 文の "except" 節で処理された例外は、ここでいうエラーには
あたりません。) いくつかのエラーは常に致命的であり、非ゼロの終了ステー
タスとなるプログラムの終了を引き起こします。例えばインタプリタ内部の矛
盾やある種のメモリ枯渇が当てはまります。エラーメッセージは全て標準エラ
ー出力に書き込まれます; これに対して、通常は実行した命令から出力される
内容は標準出力に書き込まれます。

割り込み文字 (interrupt character、普通は "Control-C" か "Delete") を
一次または二次プロンプトに対してタイプすると、入力が取り消されて一次プ
ロンプトに戻ります。 [1] コマンドの実行中に割り込み文字をタイプすると
"KeyboardInterrupt" 例外が送出されます。この例外は "try" 文で処理でき
ます。


16.1.2. 実行可能な Python スクリプト
------------------------------------

BSD 風の Unix システムでは、Python スクリプトはシェルスクリプトのよう
に直接実行可能にできます。これを行うには、以下の行

   #!/usr/bin/env python3.5

(ここではインタプリタがユーザの "PATH" 上にあると仮定しています) をス
クリプトの先頭に置き、スクリプトファイルに実行可能モードを設定します。
"#!" はファイルの最初の２文字でなければなりません。プラットフォームに
よっては、この最初の行を終端する改行文字が Windows 形式 ("'\r\n'") で
はなく、 Unix形式("'\n'")でなければならないことがあります。ハッシュま
たはポンド文字、すなわち "'#'" は、Python ではコメントを書き始めるため
に使われていることに注意してください。

**chmod** コマンドを使えば、スクリプトに実行モードや実行権限を与えるこ
とができます。

   $ chmod +x myscript.py

Windows では、"実行モード" のような概念はありません。Python のインスト
ーラーは自動的に ".py" ファイルを "python.exe" に関連付けるので、
Python ファイルをダブルクリックするとそれをスクリプトとして実行します
。".pyw" 拡張子も(訳注: "pythonw.exe" に)関連付けられ、通常コンソール
ウィンドウを抑制して実行します。


16.1.3. 対話モード用の起動時実行ファイル
----------------------------------------

Python を対話的に使うときには、インタプリタが起動する度に実行される何
らかの標準的なコマンドがあると便利なことがよくあります。これを行うには
、 "PYTHONSTARTUP" と呼ばれる環境変数を、インタプリタ起動時に実行され
るコマンドが入ったファイル名に設定します。この機能は Unix シェルの
".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 はユーザーが Python をカスタマイズするための2つのフック、
"sitecustomize" と "usercustomize" を提供しています。これがどのように
動作しているかを知るには、まずはユーザーの site-packages ディレクトリ
の場所を見つける必要があります。Python を起動して次のコードを実行して
ください:

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

"usercustomize.py" をそのディレクトリに作成して、そこでやりたいことを
すべて書くことができます。このファイルは自動インポートを無効にする
"-s" オプションを使わない限り、全ての Python の起動時に実行されます。

"sitecustomize" モジュールも同じように動作しますが、一般的にコンピュー
ターの管理者によって、グローバルの site-packages ディレクトリに作成さ
れ、 "usercustomize" より先にインポートされます。詳細は "site" モジュ
ールのドキュメントを参照してください。

-[ 脚注 ]-

[1] GNU Readline パッケージに関する問題のせいで妨げられることがありま
    す。
