没有什么比毒药价值更能说明“不要使用”。
pypoison的Python项目详细描述
毒药
Nothing says "DO NOT USE" like a poison value.
有时候你需要一个值来表示一个值的缺失。
但是,有时您需要确保绝对不以任何方式、形状、形式或任何其他方式使用此值。
在这些情况下,像None
、float('NaN')
或False
这样的值并不真正适合,因为您仍然可以“触摸”这些值。
这就是毒药的价值。 因为没有什么比毒药价值更能说明“不要使用”。
此模块提供一个重写所有方法以引发异常的对象。
目录
安装
只是pip install pypoison
。(当我上传到pypi时。)
或者将pypoison/__init__.py
作为pypoison.py
复制到项目中。
没有依赖关系。
用法
当需要毒药值时,只需使用pypoison.get_poison()
返回的值。
对象总是相同的对象。
自定义行为
默认情况下,所有访问都会引发一个ValueError
具有可读性的
解释访问了哪个属性/方法。
如果您愿意,可以调用pypoison.set_exception(my_exception)
,
而poison值现在会引发对象my_exception
无论什么时候用毒药的价值做了什么。
对于额外的幻想,您可以调用pypoison.set_handler(my_fn)
,
毒药值将提高my_fn(method_name)
返回的值。
要重置为默认行为,可以调用pypoison.set_exception(None)
示例
>>>1inpypoison.get_poison()ValueError:Triedtoaccess__contains__onpoisonvalue.>>>pypoison.get_poison()/1ValueError:Triedtoaccess__truediv__onpoisonvalue.>>>1+Foo()ValueError:Triedtoaccess__radd__onpoisonvalue.>>>pypoison.get_poison()*4ValueError:Triedtoaccess__mul__onpoisonvalue.>>>pypoison.get_poison()%3ValueError:Triedtoaccess__mod__onpoisonvalue.>>>3%pypoison.get_poison()ValueError:Triedtoaccess__rmod__onpoisonvalue.>>>'{}'.format(pypoison.get_poison())ValueError:Triedtoaccess__format__onpoisonvalue.>>>'{!r}'.format(pypoison.get_poison())ValueError:Triedtoaccess__repr__onpoisonvalue.>>>list(pypoison.get_poison())ValueError:Triedtoaccess__iter__onpoisonvalue.>>>help(pypoison.get_poison())ValueError:Triedtoaccess__getattribute__onpoisonvalue.>>>pypoison.get_poison()==42ValueError:Triedtoaccess__eq__onpoisonvalue.
警告
严重
大量使用inspect
模块可能会摆弄有毒对象,
然而,已经有了保障措施,以确保这不是一件容易的事。
被动使用,如is
或将其存储在被动容器(如列表)中
无法阻止。然而,这是意图。这个模块想
提供有毒的占位符值,而不是主动恶意值。
我不知道如何处理callable()
、id()
和type()
。
无法检测逻辑上的空用法,例如在pypoison.get_poison() in []
或者True or pypoison.get_poison()
,甚至max([pypoison.get_poison()])
。
这个模块may cause bugs 在调试器/ide/编辑器中。或者至少是意外的行为。
不要将毒药值存储在全局中。许多工具,例如unittest, 遍历全局变量并检查它们。
非严重
黑色魔法的数量可能会poison你对Python的欣赏。
pythonidae总是nonvenomous;这个模块使它有毒!
待办事项
- 用它做些奇怪的事情
贡献
尽情潜水吧!Open an issue或提交prs。