16. 附录¶
16.1. 交互模式¶
16.1.1. 错误处理¶
当发生错误时,解释器将打印错误消息和堆栈跟踪。在交互模式下,它然后返回到主提示;当输入来自文件时,将在打印堆栈跟踪后以非零退出状态退出。 (在 try
语句中由 except
子句处理的异常在此上下文中不是错误。)一些错误是无条件致命的,并导致退出非零退出;这适用于内部不一致和一些内存不足的情况。所有错误消息都写入标准错误流;执行命令的正常输出写入标准输出。
将中断字符(通常为 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
特性。
此文件仅在交互式会话中读取,而不是在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.5/site-packages'
现在您可以在该目录中创建一个名为 usercustomize.py
的文件,并在其中放置任何您想要的内容。它将影响Python的每次调用,除非它以 -s
选项启动以禁用自动导入。
sitecustomize
以相同的方式工作,但通常由全局site-packages目录中的计算机管理员创建,并且在 usercustomize
之前导入。有关更多详细信息,请参阅 site
模块的文档。
脚注
[1] | GNU Readline包的问题可能会阻止这种情况。 |