Ruby控制台应用中的Ctrl+C

在Ruby开发Ruby控制台应用的时候,遇到一个问题: 用户可以通过Ctrl+C来中止运行时的程序。

如果不加控制,则程序会被中止,并打印出错误堆栈。

比如下面的程序:

cmd  =  nil
while  cmd  !~   / Y | y | N | n /
  
print   " continue?(Y/N): "
  cmd 
=  STDIN . gets
  cmd
. chomp !
end
if  cmd  =~   / Y | y /  then
  puts 
" continue. "
else
  puts 
" exit. "
end

运行时,Ctrl+C中断,则屏幕上出现:

continue?(Y/N):E:/ProjectRuby/03_プロジェクト開発/06_Source/TestRu
nner/tester.rb:48:in `gets': Interrupt
        from E:/ProjectRuby/03_プロジェクト開発/06_Source/TestRunn
er/tester.rb:48

为了防止中断信息带给用户糟糕的提示信息,程序中应该对该情况加以处理,

用户的Ctrl+C会在Ruby底层抛出一个 Interrupt 异常,因此你可以通过begin...rescue...end来捕获该异常。

begin
  cmd 
=  nil
  
while  cmd  !~   / Y | y | N | n /
    
print   " continue?(Y/N): "
    cmd 
=  STDIN . gets
    cmd
. chomp !
  end
  
if  cmd  =~   / Y | y /  then
    puts 
" continue. "
  
else
    puts 
" exit. "
  end
rescue Interrupt
  puts 
" Programme is interrupted. "
end

运行时,Ctrl+C中断,则屏幕上出现:

continue?(Y/N):Programme is interrupted.

从而避免堆栈信息给用户带来的迷惑。

ps:  Kernal::exit  命令则会抛出 SystemExit 异常。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值