异常和警告¶
SymPy 的通用异常和警告。
- exception sympy.utilities.exceptions.SymPyDeprecationWarning(
- message,
- *,
- deprecated_since_version,
- active_deprecations_target,
关于 SymPy 中已弃用功能的警告。
有关在 SymPy 中何时以及如何弃用功能的详细信息,请参阅 弃用策略 文档。
请注意,仅构造此类不会导致发出警告。为此,您必须调用 :func`sympy_deprecation_warning` 函数。因此,不建议直接构造此类。
- sympy.utilities.exceptions.ignore_warnings(warningcls)[源代码][源代码]¶
在测试期间抑制警告的上下文管理器。
备注
在测试中不要使用 SymPyDeprecationWarning。应使用 warns_deprecated_sympy() 代替。
此函数在测试期间抑制警告时很有用。应使用 warns 函数来断言引发了警告。在警告不一定被引发(例如在导入模块时)或警告来自第三方代码的情况下,ignore_warnings 函数很有用。
此函数还可用于防止由于递归调用而导致的相同或相似警告被发出两次。
当警告(可靠地)来自 SymPy 时,应优先使用 warns 函数而不是 ignore_warnings。
>>> from sympy.utilities.exceptions import ignore_warnings >>> import warnings
这里有一个警告:
>>> with warnings.catch_warnings(): # reset warnings in doctest ... warnings.simplefilter('error') ... warnings.warn('deprecated', UserWarning) Traceback (most recent call last): ... UserWarning: deprecated
让我们用 ignore_warnings 来抑制它:
>>> with warnings.catch_warnings(): # reset warnings in doctest ... warnings.simplefilter('error') ... with ignore_warnings(UserWarning): ... warnings.warn('deprecated', UserWarning)
(未发出警告)
- sympy.utilities.exceptions.sympy_deprecation_warning(
- message,
- *,
- deprecated_since_version,
- active_deprecations_target,
- stacklevel=3,
警告 SymPy 中的一个功能已被弃用。
有关在 SymPy 中何时以及如何弃用功能的详细信息,请参阅 弃用策略 文档。
要将整个函数或类标记为已弃用,可以使用
@deprecated
装饰器。- 参数:
- 消息str
弃用消息。这可能跨越多行并包含代码示例。消息应换行至80个字符。消息会自动去除缩进和前导及尾随空白。消息可能包括基于用户输入的动态内容,但如果表达式可以是任意的,请避免使用
str(expression)
,因为它可能非常大,使警告消息不可读。- deprecated_since_versionstr
该功能被弃用的 SymPy 版本。对于新的弃用,这应该是 sympy/release.py 中的版本,不带
.dev
。如果下一个 SymPy 版本与此不同,发布管理员将需要更新任何使用错误版本的SymPyDeprecationWarning
。此参数是必需的,并且必须作为关键字参数传递。(示例:deprecated_since_version="1.10"
)。- active_deprecations_targetstr
Sphinx 目标对应于 活跃弃用列表 文档中弃用部分的章节(参见
doc/src/explanation/active-deprecations.md
)。这用于在警告消息中自动生成指向该页面的 URL。此参数是必需的,并且必须作为关键字参数传递。(示例:active_deprecations_target="deprecated-feature-abc"
)- stacklevelint, 默认值: 3
传递给
warnings.warn
的stacklevel
参数。如果你创建了一个调用此函数的包装器,应该增加此参数,以便警告信息显示产生警告的用户代码行。请注意,在某些情况下,可能会有多个不同的用户代码路径导致警告。在这种情况下,只需选择最小的公共 stacklevel。
参见
示例
>>> from sympy.utilities.exceptions import sympy_deprecation_warning >>> def is_this_zero(x, y=0): ... """ ... Determine if x = 0. ... ... Parameters ... ========== ... ... x : Expr ... The expression to check. ... ... y : Expr, optional ... If provided, check if x = y. ... ... .. deprecated:: 1.1 ... ... The ``y`` argument to ``is_this_zero`` is deprecated. Use ... ``is_this_zero(x - y)`` instead. ... ... """ ... from sympy import simplify ... ... if y != 0: ... sympy_deprecation_warning(""" ... The y argument to is_zero() is deprecated. Use is_zero(x - y) instead.""", ... deprecated_since_version="1.1", ... active_deprecations_target='is-this-zero-y-deprecation') ... return simplify(x - y) == 0 >>> is_this_zero(0) True >>> is_this_zero(1, 1) <stdin>:1: SymPyDeprecationWarning: The y argument to is_zero() is deprecated. Use is_zero(x - y) instead. See https://docs.sympy.org/latest/explanation/active-deprecations.html#is-this-zero-y-deprecation for details. This has been deprecated since SymPy version 1.1. It will be removed in a future version of SymPy. is_this_zero(1, 1) True