我正在尝试运行多行完全独立的代码,其中任何行都可能抛出错误。如何在不停止的情况下完成脚本运行(有或没有记录错误)?我试图避免在每一行使用开始/救援
我尝试运行的一些(很多)行:
int k=1;
//n= no of rows/cols
array[0][0]=1;
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++) //column
array[j][i]=k++;
for(j=i-1;j>=0;j--) //row
array[i][j]=k++;
}
答案 0 :(得分:0)
你可以按照建议在整个街区周围放一个开始..救援,或者你也可以这样做:
begin
# one or more lines of code
rescue firstPotentialExecption
# one or lines of code
rescue nextPotentialExecption
# ...
else
# AnyOtherExecptions
end
或者您可以尝试找出最终得到的异常,并且只有一个救援声明。
答案 1 :(得分:0)
如果不在每一行使用begin
/ rescue
,我都不知道如何解决这个问题。但是,您的示例显示某些行依赖于前一行的结果,因此在前一行失败时执行是没有意义的。此外,基本设置的前几行也可能引发异常,因为没有id
,文件的其余部分也可能会失败。
你可以在begin
/ rescue
块中包装有意义的块,然后如果失败则将消息打印到stderr(或做其他事情):
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
动态请求它们来删除复制:
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