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.7
(假设 Python 解释器在用户配置的 PATH
中)放在文件头部第一行,并给该 Python 文件添加可执行权限。#!
这两个字符必须被放在文件最开头,且在有些操作系统中,第一行必须使用 Unix 风格的换行符('\n'
),而不能使用 Windows 风格的换行符('\r\n'
)。在 Python 文件中,'#'
字符用于标明当前行为注释。
然后使用 chmod 命令为文件添加可执行模式(权限)。
$ chmod +x myscript.py
在 Windows 操作系统上,没有『可执行模式』的定义。Python 安装器自动将 .py
类型文件与 python.exe
解释器进行关联,双击 Python 文件即可运行 Python 脚本。此外,文件拓展名也可以为 .pyw
,在这种情况下不会显示命令行窗口。
16.1.3. 交互环境的启动文件
当你在交互环境下使用 Python 时,经常需要在启动解释器后执行一些常用的命令。你可以将你的启动命令放到一个文件,然后设置到一个环境变量 PYTHONSTARTUP
,就如同 Unix 下的 .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
模块以获取更多细节。
脚注
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: