16. 附录

16.1. 交互模式

16.1.1. 错误处理

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

在主要或次要提示中键入中断字符(通常为Control-CDelete)将取消输入并返回主要提示。[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功能。

此文件仅在交互式会话中读取,而不是在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的文件,并在其中放置任何您想要的内容。它将影响Python的每次调用,除非它以-s选项启动以禁用自动导入。

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

脚注

[1]GNU Readline包的问题可能会阻止这一点。