16. Appendix

16.1. 互动模式

16.1.1. 错误处理

发生错误时,解释器将显示错误消息和堆栈跟踪。在交互模式下,然后返回到主提示符;当 Importing 来自文件时,它在打印堆栈跟踪后以非零退出状态退出。 (在这种情况下,由try语句中的except子句处理的异常不是错误。)某些错误是无条件致命的,并导致退出的退出非零;这适用于内部不一致以及某些情况下内存不足。所有错误消息均写入标准错误流;执行命令的正常输出将写入标准输出。

将break字符(通常是 Control-C 或 Delete)键入到主提示或辅助提示会取消 Importing 并返回到主提示。 [1]在执行命令时键入break会引发KeyboardInterrupt异常,该异常可由try语句处理。

16.1.2. 可执行的 Python 脚本

在 BSD 式的 Unix 系统上,可以将 Python 脚本像 shell 脚本一样直接执行,只需将代码行

#!/usr/bin/env python3.5

(假设解释器位于用户的 PATH上),并为文件提供可执行模式。 #!必须是文件的前两个字符。在某些平台上,第一行必须以 Unix 样式的行尾('\n')结尾,而不是 Windows('\r\n')行尾。请注意,井号或井号字符'#'用于在 Python 中启动 Comments。

可以使用 chmod 命令为脚本提供可执行模式或权限。

$ chmod +x myscript.py

在 Windows 系统上,没有“可执行模式”的概念。 Python 安装程序会自动将.py文件与python.exe关联,以便双击 Python 文件将其作为脚本运行。extensions 也可以是.pyw,在这种情况下,通常出现的控制台窗口将被取消。

16.1.3. 交互式启动文件

交互式使用 Python 时,每次启动解释器时都执行一些标准命令通常很方便。您可以pass将名为 PYTHONSTARTUP的环境变量设置为包含启动命令的文件的名称来执行此操作。这类似于 Unix shell 的.profileFunction。

仅在交互式会话中读取此文件,而不是在 Python 从脚本中读取命令时读取此文件,并且在将/dev/tty作为命令的显式源给出时也不会读取(否则,其行为类似于交互式会话)。它在与执行交互式命令相同的名称空间中执行,因此可以在不限定交互式会话的情况下使用其定义或导入的对象。您也可以在此文件中更改提示sys.ps1sys.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 提供了两个钩子供您自定义它:sitecustomizeusercustomize。要查看其工作原理,首先需要找到用户 site-packages 目录的位置。启动 Python 并运行以下代码:

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

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

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

Footnotes

  • [1]
    • GNU Readline 软件包出现问题可能会阻止这种情况。