Ryan Davis的Ruby QuickRef说(没有解释): 不要rescue Exception。EVER。或者我会刺你。 为什么不?什么是正确的做法? TL; DR:StandardError代替一般异常捕获。当重新引发原始异常时(例如,当救援仅记录异常时),抢救Exception可能没问题。 Exception是根Ruby的异常层次结构,所以当你rescue Exception从拯救一切,包括子类,如SyntaxError,LoadError和Interrupt。 拯救会Interrupt阻止用户CTRLC退出程序。 拯救会SignalException阻止程序正确响应信号。除了之外,它将是不可杀戮的kill -9。 拯救SyntaxError意味着eval失败的s会默默地这样做。 所有这些都可以通过运行此程序来显示,并尝试CTRLC或者kill: loop do begin sleep 1 eval "djsakru3924r9eiuorwju3498 += 5u84fior8u8t4ruyf8ihiure" rescue Exception puts "I refuse to fail or be stopped!" end end 拯救Exception甚至不是默认值。干 begin # iceberg! rescue # lifeboats end 没有救出Exception,它从中拯救出来StandardError。您通常应该指定比默认值更具体的内容StandardError,但是从Exception 扩大范围而不是缩小范围开始,可能会产生灾难性的结果并使得捕获bug非常困难。 如果您确实需要进行救援,StandardError并且需要具有异常的变量,则可以使用以下形式: begin # iceberg! rescue => e # lifeboats end