这个问题在这里已有答案:
catch块中是否有可能发生异常?如果是,那么我该如何处理呢?
可以在catch
块中抛出异常,但它很少见,或者至少它应该是。显然这取决于你放在catch
块中的内容。
您最好的保护是避免在catch
语句中使用大量代码,并且只包含不太可能抛出另一个异常的“安全”代码。
请记住,代码的“正常”流程中的任何内容都不会因为异常而发生,所以在大多数情况下,除了日志记录或其他重要内容之外,您的catch
中除了之外没有任何内容。如果你在catch
中有一大堆应用程序代码,它可能不应该存在。
如果你必须在你的catch
做一些事情有一个深刻的,已知的原因,它可能会抛出另一个例外,你可以在你的try/catch
中放入另一个catch
。它确实发生了 - 它并非闻所未闻 - 但它并不常见。
如果你必须在你的catch
中调用一些其他方法,那么知道它是否可能抛出异常是很好的。熟悉日志记录并确保它不会抛出另一个异常并不会有什么坏处。或者,如果它是一些.NET Framework方法,文档通常会告诉您它抛出的异常,以及原因。
就像一个随机的例子,看看Remove
的Dictionary<TKey, TValue>
方法的文档:
例外
Exception Condition
ArgumentNullException key is null
然后它告诉你,如果你想知道,如果你试图删除一个不存在的密钥会发生什么。
如果Dictionary不包含具有指定键的元素,则Dictionary保持不变。没有异常被抛出。
熟悉在线文档中的内容可能非常有用,包括方法抛出的异常等详细信息。