Ruby CLI股票指数爬虫用用户输入读取哈希出现nil报错如何解决
问题原因
- 报错的核心是
index_info_resource["#{$input}"]返回了nil,你后续尝试对nil调用[:full_name]方法,就触发了undefined method '[]' for nil:NilClass错误。 - 你虽然确认输入字符串和哈希键看起来一致,但目前的输入处理只调用了
chomp删除末尾换行符,没有处理用户可能输入的首尾空白字符(比如不小心输入的空格、制表符),就会导致生成的键和哈希内置的键不匹配。 - 写法
"#{$input}"属于冗余操作,$input本身已经是字符串类型,直接作为键使用即可,没必要做额外的字符串插值。
修复方案
- 优化用户输入处理逻辑,增加去除首尾空白的
strip方法,输入获取代码修改为:
$input = gets.chomp.downcase.strip.to_s
- 访问哈希前增加存在性校验,避免直接访问不存在的键导致报错,参考代码如下:
if index_info_resource.key?($input) target_index = index_info_resource[$input] @@requested_index[:full_name] = target_index[:full_name] @@requested_index[:exchange] = target_index[:exchange] @@requested_index[:web_site] = target_index[:web_site] else puts "你输入的股票指数不存在,请重新输入" end
- 删除冗余的字符串插值逻辑,直接用
$input作为键访问哈希即可。
如果还是存在问题,可以在访问哈希前加一行p $input打印输入的实际值,确认是否存在隐藏的不可见字符。
内容的提问来源于stack exchange,提问作者Marc Auciello
相关产品推荐
相关产品推荐

