避免在链式属性上出现NoneType AttributeError异常
项目描述
在访问具有链式属性的对象时,
info = obj.a.b.c.d or 'Unknown'
如果中间的某个属性返回 None,则将立即失败
>>> obj.a None >>> obj.a.b.c. AttributeError: 'NoneType' object has no attribute 'b'
NoAttr 提供了一种绕过这种情况的方法,在一系列 None 检查过于繁琐且导致代码复杂时。而不是返回 None,你想要返回一个 NoAttr 实例,这将导致层次属性访问持续返回 NoAttr,直到链的末尾
>>> from noattr import NoAttr >>> obj = NoAttr >>> obj.a NoAttr >>> obj.a.b.c.d NoAttr
NoAttr 的行为类似于“假”值,这意味着它可以根据上下文代表 None、False、0、''、[] 或 {}。以下是一些示例
>>> obj.a NoAttr >>> obj.a.b.c.d or 'Unknown' # behaves like a falsy value 'Unknown' >>> for i in obj.a.b.c.d: # behaves like an enumerable that does not yield a value ... print(i) (no output) >>> len(obj.a.b.c.d) # behaves like an empty collection 0 >>> obj.a.b.c.d + 1 # behaves like a 0 1 >>> obj.a.b.c.d.anyfunc() # behaves like a callable NoAttr
然而,对于 ljust()、rjust()、rfind()、find()、rindex()、index() 和 count(),NoAttr 被视为单个空白字符(' '),以保留这些方法预期的行为
>>> obj.a.b.c.d.ljust(3) ' '
安装
$ pip install noattr
新闻
0.0.8 (2018-08-24)
__iter__() 现在返回一个空迭代器
0.0.7 (2018-08-21)
更新代码以兼容python3
0.0.6 (2016-03-11)
删除 python_textops 的 __or__ 和 __rshift__ 定义
0.0.5 (2015-10-13)
添加 as_list 属性
0.0.4 (2015-08-19)
添加 __setattr__ 以避免任何修改
0.0.3 (2015-07-27)
第一个官方版本
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪一个,请了解有关 安装包 的更多信息。
源分发
noattr-0.0.9.tar.gz (3.3 kB 查看散列)
构建分发
noattr-0.0.9-py3-none-any.whl (4.8 kB 查看散列)
关闭
noattr-0.0.9.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1d65d4134327fa3f921bdae02326c8784383c4262864e2f5e57dca6ae1999b4b |
|
MD5 | 5ce27264964be8b6eca226e672cffb85 |
|
BLAKE2b-256 | 2d5a67861635b4331f2192438741232e8ac7e3b69b0a4cc1bd352d52c2544413 |
关闭
noattr-0.0.9-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 75660b845a4727982529764f02133f688ac5ca01d1469e696fea7b4901dc1904 |
|
MD5 | a0cee82752008e5c85a4bc35e0e13ef7 |
|
BLAKE2b-256 | ad095398c96c755aefbef6b3d09ef88b79fbbc4131021095343ea7e0c2a7e3c2 |