没有什么比毒值更能说明“不要使用”了。
项目描述
pypoison
没有什么比毒值更能说明“不要使用”了。
有时你需要一个值来表示值的缺失。然而,有时你绝对要确保这个值不能以任何方式、形式或任何其他方式被使用。在这些情况下,像None
、float('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 总是 无毒;此模块使其 有毒!
待办事项
- 用它做奇怪的事情
贡献
请随意深入研究 或提交 PR。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
pypoison-0.0.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 092d89306c3ea6320077abc79d35e47808582627fb7df3eb07199cedd6ca6426 |
|
MD5 | b4a3b7e87618abacfd12a9f0466274fb |
|
BLAKE2b-256 | aa565e434fd7b8e185d3d2260c010d6587ad1b7bde1df396d6f2da4f79f8f074 |
pypoison-0.0.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4e0caf9f1fff5a2be014279248716992ff5f4a5e64fa1246e69c6b96700d8c2c |
|
MD5 | 8e073e9186c496e3b7f2bf513aeb2e05 |
|
BLAKE2b-256 | 7d13ffbc58b2656a1e320a0a61a51cb6c9fedbbc4df13c26b853805c4db2994e |