首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby脚本显示错误但继续

ruby脚本显示错误但继续
EN

Stack Overflow用户
提问于 2015-06-06 20:32:36
回答 2查看 41关注 0票数 0

我试图运行多行完全独立的代码,其中任何行都可能抛出错误。如何才能让脚本运行(有或没有日志记录错误),直到它完成而不停止呢?我试图避免在每一行上使用begin/ every。

我尝试运行的(许多)行中的一些:

代码语言:javascript
复制
Steam.apikey = '8_____1' #http://steamcommunity.com/dev/apikey
$stdout.reopen("playergamedump.csv", "w")
id= Steam::User.vanity_to_steamid("MEEE")
badges_hash= Steam::Player.badges(id)
puts "###BADGES###"
puts badges_hash
steam_level=Steam::Player.steam_level(id)
puts "###STEAM LEVEL###"
puts steam_level
....
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-06 20:58:30

如果不在每一行上使用begin/rescue,我就不知道有什么方法可以解决这一问题。但是,您的示例显示,某些行依赖于上一行的结果,因此在前一行失败时执行没有意义。另外,使用基本设置的前几行可能也会引发异常,因为没有id,文件的其余部分也可能会失败。

您可以在begin/rescue块中包装有意义的块,如果消息失败,则将消息打印到stderr (或执行其他操作):

代码语言:javascript
复制
Steam.apikey = '8_____1' #http://steamcommunity.com/dev/apikey
$stdout.reopen("playergamedump.csv", "w")
id = Steam::User.vanity_to_steamid("MEEE")

begin
  badges_hash = Steam::Player.badges(id)
  puts "###BADGES###"
  puts badges_hash
rescue StandardError
  $sterr.puts "Failed to get badges"
end

begin
  steam_level = Steam::Player.steam_level(id)
  puts "###STEAM LEVEL###"
  puts steam_level
rescue StandardError
  $sterr.puts "Failed to get steam_level"
end

如果文件的其余部分看起来是相同的,那么最好继续删除复制,方法是将用户属性的名称存储在数组中并使用public_send动态请求它们。

代码语言:javascript
复制
Steam.apikey = '8_____1' #http://steamcommunity.com/dev/apikey
$stdout.reopen("playergamedump.csv", "w")
id = Steam::User.vanity_to_steamid("MEEE")

[
  :badges,
  :steam_level,
  ...
].each do |property|
  begin
    value = Steam::Player.public_send(property, id)
    title = property.tr('_', ' ').upcase
    puts "####{title}###"
    puts value
  rescue StandardError
    $sterr.puts "Failed to get #{property}"
  end
end
票数 0
EN

Stack Overflow用户

发布于 2015-06-06 20:57:46

你可以像建议的那样放个开始。拯救整个街区,或者你也可以这样做:

代码语言:javascript
复制
begin
  # one or more lines of code
rescue firstPotentialExecption
  # one or lines of code 
rescue nextPotentialExecption
  # ...
else
  # AnyOtherExecptions
end

或者,你可以试着找出你在最后得到什么异常,而只有一条救援声明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30687313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档