dea*_*mon 13 python null groovy nullpointerexception
Groovy有一个很好的安全解除引用运算符,这有助于避免NullPointerExceptions:
variable?.method()
Run Code Online (Sandbox Code Playgroud)
method只有在variable没有的情况下才会被调用null.
有没有办法在Python中做同样的事情?或者我必须写if variable: variable.method()?
小智 11
不,没有.
但要检查None,你不写if x:,你写if x is None:.这是一个重要的区别 - x评估False了很多可以完全有效的值(最值得注意的是0等价数字和空集合),而x is None 只评估True参考是否x指向单例对象None.
从个人经验来看,很少需要这样的操作员.是的,None有时用来表示没有价值.但不知何故 - 也许是因为惯用的代码返回空的对象,在那里明智或抛出异常来指示严重的失败 - 我AttributeError: 'NoneType' object has no attribute '...'每月只得到两次.
我认为这可能是一种错误.null有两个含义 - "忘记初始化"和"没有数据".第一个是错误,应该抛出异常.第二种情况通常需要比"让我们不要调用此方法"更精细的处理.当我向数据库/ ORM询问a时UserProfile,它不存在而我得到了null......我是否想要默默地跳过方法的其余部分?或者我真的想(当在"库代码"中)抛出一个approriate异常(所以"用户(代码)"知道用户不在那里并且可以做出反应......或者忽略它)或者(当我是编码特定功能)向用户显示一个明智的消息("该用户不存在,您不能将其添加到您的朋友列表中")?
我已经在 Groovy 中使用过这个功能,所以我不会重复其他海报的 blub 悖论。
在 Groovy 中,像这样的语句
if(possiblyNull?.value){
...
Run Code Online (Sandbox Code Playgroud)
在 Python 中执行此操作
try:
testVar = possiblyNull.value
except:
testVar = None
if(testVar):
Run Code Online (Sandbox Code Playgroud)
这绝对是 Groovy 中的一个很酷的特性,并且有助于消除语法噪音。还有一些其他的语法糖,比如 Elvis 运算符或 *,但它们确实牺牲了易读性作为快速修复符号的代价(换句话说,它们不是 Pythonic)。
希望有帮助:-)
首先,如果变量不可解引用,您的选择取决于您希望表达式计算的结果。我将假设None是这些示例中的适当结果。
Python 中某些情况的常见习惯用法是使用条件表达式:
variable.method() if variable is not None else None
Run Code Online (Sandbox Code Playgroud)
虽然这种需求可能并不普遍,但在某些情况下它会很有用,尤其是当引用是嵌套的并且您想要这样的东西时,该习语很快就会变得麻烦。
a?.b?.c?.d
Run Code Online (Sandbox Code Playgroud)
请注意,对?.操作符安全延迟的支持是PEP 505的主要主题之一:无感知操作符 \| Python.org。它的当前状态是“延期”。
关于它的一些讨论是在:
| 归档时间: |
|
| 查看次数: |
5914 次 |
| 最近记录: |