Lua修复尝试索引NIL字段

我已经搜索了答案,这应该很简单,但我找不到解决方案。

我正在尝试从所得到的太阳能逆变器的json对象中获取数据。

当逆变器运行时,PAC字段包含我想要的POWER AC值。 当太阳落山时,该字段不会降到0,它完全从API响应中消失,因此我的代码会抛出一个错误,尝试索引一个不存在的字段。

如何捕捉此错误并在字段不存在时返回0?

PAC = resp1.Body.Data.PAC.Value

我已经尝试了:

PAC = resp1.Body.Data.PAC.Value或0

但那没起作用。

点赞
用户2858170
用户2858170

如果PAC = resp1.Body.Data.PAC.Value导致索引空值的错误,那么PAC = resp1.Body.Data.PAC.Value or 0将会导致相同的错误,因为您仍然会索引相同的空值。

我猜resp1.Body.Data.PAC是空的。

那么像这样的语句

PAC = resp1.Body.Data.PAC and resp1.Body.Data.PAC.Value or 0

将会起作用。

这基本等同于

if not reps1.Body.Data.PAC then
  PAC = 0
else
  PAC = resp1.Body.Data.PAC.Value
end

或者

if reps1.Body.Data.PAC then
  PAC = resp1.Body.Data.PAC.Value
else
  PAC = 0
end

这样,如果resp1.Body.Data.PAC为空,就可以避免索引。

您应该弄清楚到底是哪个变量为空。

2020-03-30 10:53:06
用户2446941
用户2446941

我知道它很容易,我感到有点愚蠢。

我能够在 pcall 中捕获错误。

pcall(function() PAC = resp1.Body.Data.PAC.Value end)
if PAC then
  ...
end
2020-03-30 11:00:52