Python 3.x 两种异常处理之间的区别

Python 3.x 两种异常处理之间的区别,python-3.x,exception,Python 3.x,Exception,我是python新手,在我正在编写的代码中学习了一些异常处理方面的知识。遇到了两种处理异常的方法,避免了捕获键盘中断的问题,并想知道以下两种方法之间是否存在显著差异 except (KeyboardInterrupt, SystemExit): raise except: some code... 及 我已经了解到,它们都避免捕捉键盘中断,但我只是好奇它们是否只是语法不同,做相同的事情,或者在某些情况下使用一种方式比另一种方式有优势,谢谢。在第一个示例中,您只捕捉到了两个例外,

我是python新手,在我正在编写的代码中学习了一些异常处理方面的知识。遇到了两种处理异常的方法,避免了捕获键盘中断的问题,并想知道以下两种方法之间是否存在显著差异

except (KeyboardInterrupt, SystemExit):
    raise
except:
    some code...


我已经了解到,它们都避免捕捉键盘中断,但我只是好奇它们是否只是语法不同,做相同的事情,或者在某些情况下使用一种方式比另一种方式有优势,谢谢。

在第一个示例中,您只捕捉到了两个例外,在第二个示例中,您捕获了程序可能给出的所有异常

因此,如果您试图从字典中获取一个键不在字典中的值,您将得到
KeyError
,第一个示例将无法捕获该值,程序将崩溃

但在第二个例子中,它会被抓住


什么是最好的?好的,总是试着处理与你要做的事情相关的异常,所以要像第一种情况那样具体。

嗨,我不认为你是正确的,因为他在两种情况下都捕获了所有的
异常
子类。在第一种情况下使用裸例外,在第二种情况下使用
例外作为e
KeyboardInterupt
不是
Exception
的子类,因此无法捕获。@MarekSchwarz您是对的,我只是在添加答案之前回答了fast。为了纠正我的错误,我认为它们本质上是一样的——它们只捕获属于
Exception
子类的异常。仅在第一种情况下,您还捕获了立即触发的
键盘中断
系统退出
,因此这是不必要的(如果您没有对它们进行任何处理)。在第二个示例中,将异常实例保存为
e
,这对于某些日志记录等非常有用。。但在第一种情况下,你也可以这样做。
except Exception as e: 
    some code...