16. 附录¶
16.1. 交互模式¶
交互式 REPL 有两种变体。经典的、基本的解释器在所有平台上都受支持,并具有最小的行控制功能。
在 Windows 或带有 curses
支持的类 Unix 系统上,自 Python 3.13 以来,默认使用新的交互式 shell。它支持颜色、多行编辑、历史浏览和粘贴模式。要禁用颜色,请参阅 控制颜色 以获取详细信息。功能键提供了一些额外的功能。F1 进入交互式帮助浏览器 pydoc
。F2 允许浏览命令行历史记录,而无需输出或 >>> 和 … 提示符。F3 进入“粘贴模式”,这使得粘贴大块代码更容易。按 F3 返回常规提示符。
使用新的交互式 shell 时,输入 exit 或 quit 退出 shell。这些命令后无需添加调用括号。
如果不需要新的交互式 shell,可以通过 PYTHON_BASIC_REPL
环境变量禁用它。
16.1.1. 错误处理¶
当发生错误时,解释器会打印错误消息和堆栈跟踪。在交互模式下,它会返回到主提示符;当输入来自文件时,在打印堆栈跟踪后,它会以非零退出状态退出。(在 try
语句的 except
子句中处理的异常在此上下文中不属于错误。)某些错误是无条件致命的,会导致以非零退出状态退出;这适用于内部不一致和一些内存不足的情况。所有错误消息都写入标准错误流;执行命令的正常输出写入标准输出。
在主提示符或次提示符处键入中断字符(通常是 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
作为命令的显式源时也不会读取(否则其行为类似于交互式会话)。它在与交互式命令执行相同的命名空间中执行,因此它定义或导入的对象可以在交互式会话中无需限定地使用。您也可以在此文件中更改提示符 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 提供了两个钩子来让您自定义它:sitecustomize 和 usercustomize。要了解其工作原理,您首先需要找到用户 site-packages 目录的位置。启动 Python 并运行以下代码:
>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.x/site-packages'
现在您可以在该目录中创建一个名为 usercustomize.py
的文件,并在其中放入您想要的任何内容。它将影响 Python 的每次调用,除非使用 -s
选项启动以禁用自动导入。
sitecustomize 的工作方式相同,但通常由计算机管理员在全局 site-packages 目录中创建,并在 usercustomize 之前导入。有关更多详细信息,请参阅 site
模块的文档。
脚注