在Python中,“except Exception as e”的意思是什么?

7
异常处理的典型结构如下所示:
try:
    pass
except Exception, e:
    raise
else:
    pass
finally:
    pass

请问except Exception, e:或者except Exception as e:是什么意思?通常我会使用print (e)来打印错误消息,但我想知道程序生成e的原理。

如果我用另一种方式构造它(如下),它会是什么样子?

except Exception:
    e = Exception.something

替换something的方法应该是什么?

try代码块中没有抛出异常时,程序将执行else代码块。但是,在这里finally做了什么?


3
这个问题确实有很多。我建议您阅读try的文档:https://docs.python.org/zh-cn/3/reference/compound_stmts.html#the-try-statement,那将回答大部分问题。 - user2555451
可能是 Python 中 except: 和 except Exception as e: 的区别 的重复问题。 - Stevoisiak
除非您明确地询问如何解决跨版本兼容性问题(在这种情况下,您的问题应该明确描述该问题),否则不应混合使用 [tag:python-2.7] 和 [tag:python-3.x] 标签。 - tripleee
1个回答

18

except Exception as e 或者 except Exception, e(仅适用于Python 2.x)表示捕获类型为Exception的异常,然后在except:块中将被抛出的异常(实际对象,而不是异常类)绑定到变量e

至于finally,它是一个始终会执行的块,无论发生什么情况,在except块之后执行(如果引发异常),但始终在任何其他跳出作用域的内容之前执行(例如returncontinueraise)。


“except Exception, e:”和“except Exception as e:”是一样的吗?第一个例子是否捕获基本异常? - variable
这两种形式完全相同。都不会捕获基本异常(例如 SystemExitKeyboardInterrupt,它们继承自 BaseException 但不继承自 Exception)。如果你抛出的东西 不是 继承自 BaseException 的(在 Python 2 中你可以抛出任意对象,例如字符串,但你不应该这样做),它们也不会被捕获。 - Max Noel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接