在except块后执行try块的一部分

2 投票
8 回答
3882 浏览
提问于 2025-04-16 07:20

我知道这个问题听起来有点奇怪,可能也没有答案。

我想在捕获到异常并执行完异常处理块之后,继续执行try块中的剩余代码。

举个例子:

[...]
try:
 do.this()
 do.that()
 [...]
except:
 foo.bar()
[...]

假设do.this()抛出了一个异常,这个异常被foo.bar()处理了,然后我想继续执行do.that()中的代码。我知道没有GOTO语句,但也许可以找到一些黑科技或者变通的方法!

谢谢!

8 个回答

1

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户输入一个数字时,我们可能想要检查这个数字是否在一个特定的范围内。如果在范围内,我们就执行某个任务;如果不在范围内,程序可能会给出一个提示,告诉用户输入不正确。

这种情况下,我们通常会使用“条件语句”。条件语句就像是一个判断的开关,它会根据你给出的条件来决定程序接下来要做什么。简单来说,就是“如果……那么……否则……”的逻辑。

在编程中,条件语句可以帮助我们控制程序的流程,让它更加智能和灵活。通过合理使用这些语句,我们可以让程序根据不同的输入做出不同的反应。

fcts = [do.this, do.that]
for fct in fcts:
    try:
        fct()
    except:
        foo.bar()
2

使用finally块?我是不是漏掉了什么?

   [...] 
    try: 
     do.this() 
    except: 
     foo.bar() 
    [...] 
    finally:
     do.that()
     [...] 
5

一个 try... except... 代码块是用来捕捉 一个 异常的。这就是它的作用。它会先执行 try 里面的代码,如果出现了异常,就会在 except 里面处理这个异常。你不能在 try 里面抛出多个异常。

这样设计是有意为之:这个结构的目的是让你明确地处理发生的异常。如果你在 try 的末尾返回,就违反了这个原则,因为那样 except 就会处理多个事情。

你应该这样做:

try:
    do.this()
except FailError:
    clean.up()

try:
    do.that()
except FailError:
    clean.up()

这样你抛出的任何异常都会被明确处理。

撰写回答