Python 捕获已捕获的异常
我有一个函数,它既可以独立运行,也可以被处理某些异常的其他函数使用Python 捕获已捕获的异常,python,python-3.x,Python,Python 3.x,我有一个函数,它既可以独立运行,也可以被处理某些异常的其他函数使用 def some_function(): try: do_something() except SpecificException: handle_exception() 我还有第二个函数,它调用第一个函数,但希望在某个函数中发生异常时以不同的方式处理该异常: def different_function(): try: some_function()
def some_function():
try:
do_something()
except SpecificException:
handle_exception()
我还有第二个函数,它调用第一个函数,但希望在某个函数中发生异常时以不同的方式处理该异常:
def different_function():
try:
some_function()
except SpecificException:
different_handling()
这有可能吗?我正在寻找的是一种禁用some_函数中的except
的方法,这样try-except-indifferent_函数
可以捕获特定异常我无法准确理解您想要说的内容,但是如果您在第一个函数中处理特定异常,那么您在第二个功能不起作用。如果这两个异常彼此不同,那么FileNotFoundException和IOException将改变这种情况。在这种情况下,无论代码给出哪种错误,与之相关的部分都将工作。如果问题与此不同,您能稍微打开一点问题吗?在执行所需逻辑后,您可以在第一个函数中再次引发异常
def some_function():
try:
do_something()
except SpecificException as e:
handle_exception()
raise e
告诉函数some_函数
不要处理异常并传递它
def some_function(handleException=True):
try:
do_something()
except SpecificException:
if !handleException: raise
handle_exception()
def different_function():
try:
some_function(handleException=False)
except SpecificException:
different_handling()
或者给函数some\u函数
提供要使用的异常处理程序
def some_function(exceptionHandler=handle_exception):
try:
do_something()
except SpecificException:
exceptionHandler()
def different_function():
some_function(exceptionHandler=different_handling)
这完全取决于您如何处理第一个函数。如果第一个函数接受错误并进行处理,那么第二个函数将不会发现任何错误,因此它将执行
但是如果您的第一个函数不能处理该错误(假设您的第一个函数处理错误类型1,但在运行时它引发了错误类型2),那么第一个函数的异常将明显失败,如果在第二个函数中正确处理了该错误,则一切正常
我的意思是,如果第一个函数以某种方式引发了一个错误,那么第二个函数将捕获它,否则就没有那么简单了。现在,如果您希望在第二个函数中捕获相同的错误,只需在第一个异常中引发错误。您可以使用raise
语句重新引发它
def some_function():
try:
do_something()
except SpecificException:
handle_exception()
raise
如上所述:如果不存在表达式,raise将重新引发当前作用域中活动的最后一个异常代码>您的示例是合法的,但让我们将其分为几个常见案例,以检查我将提供的示例:
def some_function():
try:
a = int("a")
except ValueError:
print("not convertable")
def different_function():
try:
some_function()
except Exception as e:
print(e)
different_function()
输出:
not convertable
I Know how to fix it: invalid literal for int() with base 10: 'a'
发生了什么事
函数在try
catch
语句中调用的不同的\u函数
在它自己的try
catch
语句中遇到一行引发异常
,并对其进行处理。
现在-异常从未重新引发到外部函数,该函数保持运行而不会遇到错误
这是一个“当内部函数知道如何处理异常时”的示例
有时,在现实生活中,内部函数不知道如何自行处理异常,然后重新引发异常,如下所示:
def some_function():
try:
a = int("a")
except ValueError as e:
raise e
def different_function():
try:
some_function()
except Exception as e:
print("I Know how to fix it: " + str(e))
different_function()
输出:
not convertable
I Know how to fix it: invalid literal for int() with base 10: 'a'
按照这个顺序,错误处理链在整个程序中保持跟踪,并在任何可以处理的地方进行处理
最佳做法是尽可能少地将语句保存在try
和except
中,以避免通过它们遇到异常。两种异常都是相同的,例如FileNotFound。假设some_function
仅在找不到文件时发出警告消息,但是different_function
中的异常处理应创建一个新文件。如果是这样,为什么要使用两种不同的异常处理机制?你可以一次完成,除了。它可以创建警告并随后创建文件。如果要禁用某个\u函数中的异常,可以删除try except块,它将自动落入不同\u函数中的异常。因为函数具有不同的职责。例如,某些函数
应读取一个文件(因此,当文件不存在时会引发异常),并由模块中的多个函数使用Differentive_function
是一个特殊的用例,如果没有文件存在,我们希望创建一个新的文件。是的,这就是您要寻找的。