28.1. sys —系统特定的参数和Function

该模块提供对解释器使用或维护的某些变量以及与解释器强烈交互的Function的访问。它始终可用。

要遍历标准 Importing 或命令行上给出的文件列表,请参阅fileinput模块。

2.0 版中的新Function。

此Function应仅用于内部和专用目的。

2.6 版的新Function。

这对于调试死锁最有用:此函数不需要死锁线程的配合,并且只要这些线程的调用堆栈保持死锁状态,它们就会被冻结。在调用代码检查帧时,为非死锁线程返回的框架可能与该线程的当前活动没有任何关系。

此Function应仅用于内部和专用目的。

2.5 版的新Function。

评估在交互式 Python 会话中 Importing 的expression的结果将调用sys.displayhook。这些值的显示可以pass向sys.displayhook分配另一个单参数函数来定制。

2.6 版的新Function。

当引发并捕获异常时,解释器将调用带有三个参数的sys.excepthook,异常类,异常实例和回溯对象。在交互式会话中,这恰好在控制权返回到提示之前发生。在 Python 程序中,这恰好在程序退出之前发生。可以pass为sys.excepthook分配另一个三参数函数来定制此类顶级异常的处理。

如果堆栈上的任何地方都没有异常处理,则返回包含三个None值的 Tuples。否则,返回的值为(type, value, traceback)。它们的含义是:* type 获取正在处理的异常的异常类型(一个类对象); * value 获取异常参数(其关联值raise的第二个参数,如果异常类型为类对象,则该参数始终为类实例); * traceback *获取一个回溯对象(请参见参考手册),该对象在最初发生异常的位置封装了调用堆栈。

如果调用exc_clear(),则此函数将返回三个None值,直到在当前线程中引发另一个异常或执行堆栈返回到正在处理另一个异常的帧为止。

Warning

在处理异常的函数中将* traceback *返回值分配给局部变量将导致循环引用。这将防止垃圾回收由同一函数中的局部变量或回溯引用的任何内容。由于大多数函数不需要访问 traceback,因此最好的解决方案是使用exctype, value = sys.exc_info()[:2]之类的东西来仅提取异常类型和值。如果确实需要回溯,请确保在使用后将其删除(最好使用tryfinally语句完成)或在本身不处理异常的函数中调用exc_info()

Note

从 Python 2.2 开始,启用垃圾回收并且无法访问时,会自动回收此类循环,但是避免创建循环仍然更加有效。

仅在少数情况下才需要此Function。这些包括日志记录和错误处理系统,这些系统报告有关上一个或当前异常的信息。此Function也可用于try释放资源并触发对象完成,尽管无法保证将释放哪些对象(如果有)。

2.3 版的新Function。

由于它们是全局变量,因此它们并非特定于当前线程,因此在多线程程序中使用它们并不安全。如果未处理任何异常,则将exc_type设置为None,而其他两个则未定义。

可选参数* arg *可以是给出退出状态的整数(默认为零),也可以是其他类型的对象。如果它是整数,则 Shell 等将零视为“成功终止”,而将任何非零值视为“异常终止”。大多数系统要求它的范围是 0–127,否则会产生不确定的结果。某些系统具有为特定的退出代码分配特定含义的约定,但是这些通常不完善。 Unix 程序通常将 2 用于命令行语法错误,将 1 用于所有其他类型的错误。如果传递了另一种类型的对象,则None等效于传递零,并且将任何其他对象输出到stderr并导致退出代码为 1.特别是,sys.exit("some error message")是发生错误时退出程序的快速方法。

由于exit()finally“仅”引发异常,因此它仅在从主线程调用时才退出进程,并且不会拦截该异常。

Note

当程序被 signal 杀死,检测到 Python 致命内部错误或调用os._exit()时,不会调用 exit 函数。

从版本 2.4 开始不推荐使用:改为使用atexit

attribute flag
debug -d
py3k_warning -3
division_warning -Q
division_new -Qnew
inspect -i
interactive -i
optimize -O-OO
dont_write_bytecode -B
no_user_site -s
no_site -S
ignore_environment -E
tabcheck -t-tt
verbose -v
unicode -U
bytes_warning -b
hash_randomization -R

2.6 版的新Function。

版本 2.7.3 中的新Function:hash_randomization属性。

attribute float.h macro explanation
epsilon DBL_EPSILON 1 与可表示为浮点数的最小值之间的差(大于 1)
dig DBL_DIG 浮点数中可以如实表示的最大十进制数字;见下文
mant_dig DBL_MANT_DIG 浮点数精度:浮点数有效位数的基数radix
max DBL_MAX 最大可表示有限浮点数
max_exp DBL_MAX_EXP 使得radix**(e-1)是可表示的有限浮点数的最大整数 e
max_10_exp DBL_MAX_10_EXP 使得10**e在可表示的有限浮点数范围内的最大整数 e
min DBL_MIN 最小正归一化浮点数
min_exp DBL_MIN_EXP 最小整数 e,使得radix**(e-1)是规范化的浮点数
min_10_exp DBL_MIN_10_EXP 最小整数 e,使得10**e是规范化的浮点数
radix FLT_RADIX 指数表示基数
rounds FLT_ROUNDS 整数常数,表示用于算术运算的舍入模式。这反映了解释器启动时系统 FLT_ROUNDS 宏的值。有关可能的值及其含义的说明,请参见 C99 标准的 5.2.4.2.2 节。

属性sys.float_info.dig需要进一步说明。如果s是代表最多具有sys.float_info.dig个有效数字的十进制数字的任何字符串,则将s转换为浮点数并再次返回将恢复代表相同十进制值的字符串:

>>> import sys
>>> sys.float_info.dig
15
>>> s = '3.14159265358979'    # decimal string with 15 significant digits
>>> format(float(s), '.15g')  # convert to float and back -> same value
'3.14159265358979'

但是对于具有超过sys.float_info.dig个有效数字的字符串,并非总是如此:

>>> s = '9876543211234567'    # 16 significant digits is too many!
>>> format(float(s), '.16g')  # conversion changes value
'9876543211234568'

2.6 版的新Function。

2.7 版的新Function。

2.3 版的新Function。

2.0 版中的新Function。

2.2 版中的新Function。

2.3 版的新Function。

如果给定,如果对象不提供检索大小的方法,则将返回* default *。否则将引发TypeError

getsizeof()调用对象的__sizeof__方法,如果该对象由垃圾收集器 Management,则会增加额外的垃圾收集器开销。

2.6 版的新Function。

CPython 实现细节: 此函数应仅用于内部和专用目的。不能保证它在所有 Python 实现中都存在。

2.6 版的新Function。

CPython 实现细节: gettrace()函数仅用于实现调试器,事件探查器,覆盖率工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此可能并非在所有 Python 实现中都可用。

2.6 版的新Function。

Constant Platform
0 (VER_PLATFORM_WIN32s) Windows 3.1 上的 Win32s
1 (VER_PLATFORM_WIN32_WINDOWS) Windows 95/98/ME
2 (VER_PLATFORM_WIN32_NT) Windows NT/2000/XP/x64
3 (VER_PLATFORM_WIN32_CE) Windows CE
Constant Meaning
1 (VER_NT_WORKSTATION) 该系统是工作站。
2 (VER_NT_DOMAIN_CONTROLLER) 该系统是域控制器。
3 (VER_NT_SERVER) 系统是服务器,而不是域控制器。

此函数包装 Win32 GetVersionEx()函数;有关这些字段的更多信息,请参见OSVERSIONINFOEX()上的 Microsoft 文档。

Availability: Windows.

2.3 版的新Function。

在 2.7 版中进行了更改:更改为命名 Tuples,并添加了* service_pack_minor service_pack_major suite_mask product_type *。

if sys.hexversion >= 0x010502F0:
    # use some advanced feature
    ...
else:
    # use an alternative implementation or warn the user
    ...

之所以称为hexversion,是因为将其传递给内置的hex()函数时,它看起来才有意义。 version_info值可用于更友好的相同信息编码。

hexversion是具有以下布局的 32 位数字:

位(大端 Sequences) Meaning
1-8 PY_MAJOR_VERSION(2.1.0a3中的2)
9-16 PY_MINOR_VERSION(2.1.0a3中的1)
17-24 PY_MICRO_VERSION(2.1.0a3中的0)
25-28 PY_RELEASE_LEVEL(对于 alpha 来说是0xA,对于 Beta 来说是0xB,对于候选发布者来说是0xC,对于finally版本来说是0xF)
29-32 PY_RELEASE_SERIAL(2.1.0a3中的3,finally版本为零)

因此2.1.0a3是 hexversion 0x020100a3

版本 1.5.2 中的新Function。

Attribute Explanation
bits_per_digit 每个数字中保留的位数。 Python 整数内部存储在基本2**long_info.bits_per_digit
sizeof_digit 用于表示数字的 C 类型的字节大小

2.7 版的新Function。

变量的含义与上面exc_info()的返回值相同。 (由于只有一个交互线程,因此与exc_type等不同,这些变量与线程安全无关)

在任何隐式默认查找器或sys.path之前搜索sys.meta_path

有关原始规范,请参见 PEP 302

在程序启动时初始化,此列表的第一项path[0]是包含用于调用 Python 解释器的脚本的目录。如果脚本目录不可用(例如,如果交互式调用解释器或从标准 Importing 中读取脚本),则path[0]为空字符串,它将引导 Python 首先搜索当前目录中的模块。请注意,脚本目录是在 PYTHONPATH结果插入的条目之前*插入的。

程序可以出于自己的目的随意修改此列表。

在版本 2.3 中更改:不再忽略 Unicode 字符串。

See also

模块site介绍了如何使用.pth 文件扩展sys.path

最初在 PEP 302中指定。

最初在 PEP 302中指定。

对于大多数 Unix 系统,这是uname -s返回的小写 os 名称,并附加了uname -r返回的版本的第一部分,例如'sunos5'在构建 Python 时。除非您要测试特定的系统版本,否则建议使用以下习惯用法:

if sys.platform.startswith('freebsd'):
    # FreeBSD-specific code here...
elif sys.platform.startswith('linux'):
    # Linux-specific code here...

在 2.7.3 版中进行了更改:由于大量代码检查sys.platform == 'linux2',并且在 Linux 2.x 和 3.x 之间没有实质性的变化,因此即使在 Linux 3.x 上,sys.platform始终设置为'linux2'。在 Python 3.3 和更高版本中,该值将始终设置为'linux',因此建议始终使用上面介绍的startswith惯用语。

对于其他系统,值是:

System platform value
Linux(2.x 3.x) 'linux2'
Windows 'win32'
Windows/Cygwin 'cygwin'
Mac OS X 'darwin'
OS/2 'os2'
OS/2 EMX 'os2emx'
RiscOS 'riscos'
AtheOS 'atheos'

See also

os.name的粒度较粗。 os.uname()提供与系统有关的版本信息。

platform模块提供对系统身份的详细检查。

2.6 版的新Function。

2.0 版中的新Function。

2.2 版中的新Function。

概要文件函数应具有三个参数:* frame event arg *。 * frame *是当前堆栈帧。 * event *是一个字符串:'call''return''c_call''c_return''c_exception'。 * arg *取决于事件类型。

这些事件具有以下含义:

可能的最高限制取决于平台。当用户拥有需要深度递归的程序和支持更高限制的平台时,用户可能需要将限制设置为更高。这应该谨慎进行,因为过高的限制可能会导致崩溃。

跟踪函数应具有三个参数:* frame event arg *。 * frame *是当前堆栈帧。 * event *是一个字符串:'call''line''return''exception'。 * arg *取决于事件类型。

每当 Importing 新的本地范围时,都会调用 trace 函数(* event *设置为'call')。它应该返回对该范围要使用的本地跟踪函数的引用;如果不应该跟踪该范围,则返回None

本地跟踪函数应返回对自身的引用(或对另一个函数的引用,以在该范围内进行进一步的跟踪),或者返回None以关闭该范围内的跟踪。

这些事件具有以下含义:

请注意,由于异常是在调用者链中传播的,因此在每个级别都会生成'exception'事件。

有关代码和框架对象的更多信息,请参见标准类型层次结构

CPython 实现细节: settrace()函数仅用于实现调试器,事件探查器,覆盖率工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此可能并非在所有 Python 实现中都可用。

2.4 版的新Function。

CPython 实现细节: 该函数与 CPython 实现细节紧密相关,因此不可能在其他地方实现。

如果实际文件已被损坏的对象覆盖,它也可以用于将实际文件还原到已知的工作文件对象。但是,执行此操作的首选方法是在替换之前的流之前显式保存它,并还原保存的对象。

2.5 版的新Function。

Note

Python 现在使用 git developed。在最新的 Python 2.7 错误修正版本中,subversion因此包含占位符信息。在 Python 3.3 中已将其删除。

2.3 版的新Function。

2.0 版中的新Function。

在 2.7 版中进行了更改:添加了命名组件属性

Citations

首页