Python 中有检查异常和非检查异常的概念吗?

Pra*_*pta 6 python java exception

我的一位从事 JAVA 工作的朋友问我如何在 Python 中处理已检查和未检查的异常。我以前没有听说过这些术语,所以我用谷歌搜索来了解什么是检查异常和未检查异常。我在Python中没有找到任何与这种异常相关的内容。

Python 中有检查异常和非检查异常的概念吗?如果否,那么默认情况下所有异常都会被检查或未检查?

先感谢您!

fla*_*kes 8

Python 中没有检查异常。但Python在异常类层次结构上确实有一些相似之处。这是Java结构:

来源

在 Java 中,如果该方法将抛出一个Exception或任何继承自 的类Exception,但不是RuntimeException. 该规则称为检查异常。它强制用户考虑它们,否则应用程序将无法编译。

在Python中我们仍然有类似的概念,但没有强制执行。您之前可能听说过,执行裸露的 except 语句是不好的风格,至少您应该选择捕获Exception

try:
   foo()
except: # bad!
   bar()

try:
   foo()
except Exception: # somewhat better!
   bar()
Run Code Online (Sandbox Code Playgroud)

这是因为在 Python 中,Exception扩展自BaseException并且裸露except将捕获所有内容。例如,您可能不想捕获ctrl+c哪个引发KeyboardInterrupt. 如果你做了一个 bare except:,那么KeyboardInterrupt就会被抓住,但如果你做了一个,except Exception:你会让这个气泡冒出来并停止应用程序。那是因为KeyboardInterrupt延伸BaseException而不是延伸Exception,因此不会被捕获!