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

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为什么我们不能将ArrayList<Integer>传递给具有(Integer…)的方法参数   java Spring RestTemplate映射JSON对映射的响应引发不匹配的PutException   在系统中找到java Selenium元素,但在Jenkins中未找到   java在Android中使用JavaMail API发送电子邮件,而不使用默认/内置应用程序   数组如何在Java数据结构中同时存储数字和相应的单词?   为什么“+”运算符未定义?JAVA   java如何在游戏中添加高分系统?   java在球门碰撞中区分球和球员   java如何使用SpringSecurity4.0.1使用Auth令牌实现Rest完整Web服务。释放   java如何解决这个错误:Android资源链接失败?   java多线程文件处理和数据库批插入   导致Tomcat失败的java无用块线程   java主线程做了太多的工作,尽管我使用了异步线程(laggy UI)   在Java FX 2.0中滚动锚定节点时,锚定始终可见?   java使用EJB3中的客户机jar和设计模式