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 提供了两个钩子用于自定义模块: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 模块以获取更多细节。

脚注

本文章首发在 LearnKu.com 网站上。
上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~