使用 python 从 try 跳转到 except

Joh*_*now 5 python try-catch break

我搜索中断 try 并进入 except 的方法(此示例在中断行中有一个语法错误)

def fool():
    return 0

try:
    var = fool()
    if var == 0:
        pass  # from here jump to except 
except:
    fool2()
Run Code Online (Sandbox Code Playgroud)

我想到的另一种方式是:

var = fool()
if var == 0:
     fool2()
Run Code Online (Sandbox Code Playgroud)

另一个更Pythonic的解决方案?

Don*_*Don 5

您可以引发通用异常:

try:
    var = fool()
    if var == 0:
        raise Exception
except:
    fool2()
Run Code Online (Sandbox Code Playgroud)

但这不是好的编程:您应该始终清楚要捕获哪些异常。

Python 的禅宗指出“错误永远不应该悄无声息地过去”。

所以,这可能是一个更好的实现:

class FoolException(Exception):
    pass

def fool():
    if everything_ok:       
        return 0
    raise FoolException()


try:
    var = fool()
    if var == 0:
        raise FoolException() 
except FoolException:
    fool2()
Run Code Online (Sandbox Code Playgroud)

这将防止您捕获不需要的异常(例如 IndexError、ZeroDivisionError...)

但是,我认为这里最好的模式是单独调用傻瓜2:

def fool():
    return 0


try:
    var = fool()
    if var == 0: #Here I manage controlled events
        fool2()
except: #Here I manage uncontrolled events
    fool2()
Run Code Online (Sandbox Code Playgroud)

这种方式更好,因为它隔离了可能引发异常的指令:

def fool():
    return 0


try:
    var = fool()
except: #Here I manage uncontrolled events
    fool2()
else:  #Here I manage controlled events
    if var == 0:
        fool2()
Run Code Online (Sandbox Code Playgroud)