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

pypoison的Python项目详细描述


毒药

Nothing says "DO NOT USE" like a poison value.

有时候你需要一个值来表示一个值的缺失。 但是,有时您需要确保绝对不以任何方式、形状、形式或任何其他方式使用此值。 在这些情况下,像Nonefloat('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。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java楼梯的最大高度   java Jackson从1.7.1更新到2.8.6 JsonTypeInfo子类型反序列化   Spring WebApp中的java JPA异常处理   java在SwingWorker(doInBackground)中从WorkerThread调用多个方法?   java Android Studio构建到jar   java是添加多个按钮组的更有效方法   java MySQL JDBC连接池最大大小   java如何防止元素<Integer>变成元素<Object>   Java:处理大型XML文件提取数据而不编写状态自动机?   SpringBoot和React Web应用程序中CAS的java重定向问题   需要java算法方面的帮助吗   java在JDK 16中使用PowerMock   java异常错误本机方法签名   在Java Android中将JSON映射到数组/对象   如何打开一个窗口。java程序中的dat文件   java应用程序引擎+Maven+热插拔   java Moxy的getValueByXPath为除根元素以外的所有元素返回null