我使用Ruby find命令从Puppet数据库中收集我需要的信息,如下所示。
vm_name = puppetdb.find { |details| details['certname']==(hostname) and details['name'] == 'az_metadata' }['value']['compute']['name']
字符串
有些参数没有'az_metadata'参数,这会导致find函数显示“undefined method `[]' for nil:nil class(no method error)”。我如何处理这些或未定义的方法值?
我如何处理这些或未定义的方法值从查找结果为该特定变量?
2条答案
按热度按时间hs1ihplo1#
从错误中可以看出,结果中某个键的值似乎是
nil
。您可以使用挖掘方法或安全导航操作员
字符串
cig3rfwq2#
有些参数没有'az_metadata'参数,这会导致find函数显示“undefined method
[]' for nil:nil class(no method error)”。我如何处理这些或未定义的方法值? 在尝试访问其元素之前,测试结果是否为
nil`?在Ruby 2.0中执行此操作的方法比其他版本少,但您可能能够使用的任何版本都应该接受这一点:字符串
当然,对于
puppetdb.find
返回nil
的情况,您可以使用不同的默认值。当然,如果你不能依靠结果得到一个
'value'
,而得到一个'compute'
,那么问题又会出现,你可能需要多次执行上述操作。或者,如果你的范围足够窄,那么拯救
NoMethodError
也是合理的:型
但是,请注意,这会使
nil
变得模糊不清,并且它也会捕获结果或其他中间值之一不是nil
但也没有[]
方法的情况。