跳转到主要内容

没有什么比毒值更能说明“不要使用”了。

项目描述

pypoison

没有什么比毒值更能说明“不要使用”了。

有时你需要一个值来表示值的缺失。然而,有时你绝对要确保这个值不能以任何方式、形式或任何其他方式被使用。在这些情况下,像Nonefloat('NaN')False这样的值并不适用,因为你仍然可以“接触”这些值。

这就是毒值的作用。因为没有什么比毒值更能说明“不要使用”了。

此模块提供了一个对象,它覆盖了所有方法以引发异常。

目录

安装

只需pip install pypoison。(在我将其上传到PyPI之后。)

或者只需将pypoison/__init__.py复制到您的项目中作为pypoison.py

没有依赖关系。

用法

当您需要毒值时,只需使用pypoison.get_poison()返回的值。

该对象始终是同一个对象。

自定义行为

默认情况下,所有访问都会引发一个带有可读性解释的ValueError,说明访问了哪个属性/方法。

如果您希望有所不同,您可以通过调用pypoison.set_exception(my_exception),毒值现在会在使用毒值时引发对象my_exception

为了更花哨,您可以调用pypoison.set_handler(my_fn),毒值将引发my_fn(method_name)返回的任何内容。

要重置为默认行为,您可以调用pypoison.set_exception(None)

示例

>>> 1 in pypoison.get_poison()
ValueError: Tried to access __contains__ on poison value.
>>> pypoison.get_poison() / 1
ValueError: Tried to access __truediv__ on poison value.
>>> 1 + Foo()
ValueError: Tried to access __radd__ on poison value.
>>> pypoison.get_poison() * 4
ValueError: Tried to access __mul__ on poison value.
>>> pypoison.get_poison() % 3
ValueError: Tried to access __mod__ on poison value.
>>> 3 % pypoison.get_poison()
ValueError: Tried to access __rmod__ on poison value.
>>> '{}'.format(pypoison.get_poison())
ValueError: Tried to access __format__ on poison value.
>>> '{!r}'.format(pypoison.get_poison())
ValueError: Tried to access __repr__ on poison value.
>>> list(pypoison.get_poison())
ValueError: Tried to access __iter__ on poison value.
>>> help(pypoison.get_poison())
ValueError: Tried to access __getattribute__ on poison value.
>>> pypoison.get_poison() == 42
ValueError: Tried to access __eq__ on poison value.

注意事项

严重

大量使用inspect模块可能会与毒对象玩耍,但是已经采取了安全措施来确保这不是一件容易的事情。

被动使用,如 is 或将其存储在被动容器(例如列表)中是无法防止的。然而,这是故意的。本模块希望提供一个有毒的占位符值,而不是一个主动恶意值。

我不确定如何处理 callable()id()type()

逻辑上为空的用法无法检测,例如在 pypoison.get_poison() in []True or pypoison.get_poison() 或甚至 max([pypoison.get_poison()]) 中。

此模块可能会在您的调试器/IDE/编辑器中引发错误。[链接](https://github.com/bpython/bpython/issues/776)。或者至少会有意外行为。

不要在全局变量中存储毒值。许多工具,例如 unittest,会遍历全局变量并检查它们。

非严重

黑色魔法的数量可能会 毒害 您对 Python 的欣赏。

Pythonidae 总是 无毒;此模块使其 有毒

待办事项

  • 用它做奇怪的事情

贡献

请随意深入研究![打开问题](https://github.com/BenWiederhake/pypoison/issues/new) 或提交 PR。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

pypoison-0.0.2.tar.gz (4.6 kB 查看哈希值)

上传时间

构建分发

pypoison-0.0.2-py3-none-any.whl (5.5 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面