跳转到主要内容

避免在链式属性上出现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 的行为类似于“假”值,这意味着它可以根据上下文代表 NoneFalse0''[]{}。以下是一些示例

>>> 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 查看散列)

上传时间 Python 3

支持