16. 附录
********


16.1. 交互模式
==============


16.1.1. 错误处理
----------------

当发生错误时，解释器会打印一条错误消息和一个堆栈跟踪。在交互模式下，它
返回到主提示符；当输入来自文件时，在打印堆栈跟踪之后，它会以非零状态退
出。（"except" 在 "try" 中产生的错误，在这个上下文中没有错误。）有些错
误是无条件致命的，并导致一个非零退出；这适用于内部逻辑矛盾和内存耗尽的
情况。所有错误消息都被写入标准错误流；执行命令的正常输出被写入标准输出
。

将中断字符（通常为 "Control-C" 或 "Delete" ）键入主要或辅助提示会取消
输入并返回主提示符。 [1] 在执行命令时键入中断引发的
"KeyboardInterrupt" 异常，可以由 "try" 语句处理。


16.1.2. 可执行的Python脚本
--------------------------

在BSD等类Unix系统上，Python脚本可以直接执行，就像shell脚本一样，第一行
添加:

   #!/usr/bin/env python3.5

（假设解释器位于用户的 "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" 功能。

This file is only read in interactive sessions, not when Python reads
commands from a script, and not when "/dev/tty" is given as the
explicit source of commands (which otherwise behaves like an
interactive session).  It is executed in the same namespace where
interactive commands are executed, so that objects that it defines or
imports can be used without qualification in the interactive session.
You can also change the prompts "sys.ps1" and "sys.ps2" in this file.

如果你想从当前目录中读取一个额外的启动文件，你可以使用像 "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提供了两个钩子来让你自定义它："sitecustomize" 和 "usercustomize"
。要查看其工作原理，首先需要找到用户site-packages目录的位置。启动
Python并运行此代码:

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

现在，您可以在该目录中创建一个名为 "usercustomize.py" 的文件，并将所需
内容放入其中。它会影响Python的每次启动，除非它以 "-s" 选项启动，以禁用
自动导入。

以相同的方式工作，但通常由全局site-packages目录中的计算机管理员创建，
并在以下之前导入 "usercustomize" 。有关更多详细信息，请参阅 "site" 模
块的文档。

-[ 脚注 ]-

[1] GNU Readline包的问题可能会阻止这种情况。
