try:
#statement 1
#statement 2
except Exception, err:
print err
pass
这可能非常微不足道,但直到现在我才真正考虑过它,我发现自己无法回答以下问题:
如果语句 1 中出现错误,语句 2 会被执行吗?
在语句 1 和语句 2 都出现错误的情况下,Exception 如何处理?它在上面的代码中打印出哪个错误?两个都?
try:
#statement 1
#statement 2
except Exception, err:
print err
pass
这可能非常微不足道,但直到现在我才真正考虑过它,我发现自己无法回答以下问题:
如果语句 1 中出现错误,语句 2 会被执行吗?
在语句 1 和语句 2 都出现错误的情况下,Exception 如何处理?它在上面的代码中打印出哪个错误?两个都?
您的两个问题的答案都是“否”。
一旦在try/except
块中抛出错误,该try
部分就会立即退出:
>>> try:
... 1/0
... print 'hi'
... except ZeroDivisionError, e:
... print 'error'
...
error
>>>
如您所见,print 'hi'
即使我except
为它做了一个代码,代码也永远不会到达该部分。
你可以在这里阅读更多。
来自 Python 文档:
如果在 try 子句执行期间发生异常,则跳过该子句的其余部分。然后如果它的类型与以 except 关键字命名的异常匹配,则执行 except 子句,然后在 try 语句之后继续执行。
所以一旦发生错误,它就会跳到异常
在引发异常时,控制会在引发异常try
的点离开块并将其提供给适当的except
块。如果语句 1 抛出异常,语句 2 将不会执行。
这也回答了您的第二个问题:您描述的场景不可能发生。
1) 如果语句 1 中出现错误,语句 2 会被执行吗?
不会。异常将被引发和捕获。据我了解,python 将向上移动堆栈并在调用者中查找异常处理程序
2) 语句 1 和语句 2 都出现错误时,Exception 如何处理?它在上面的代码中打印出哪个错误?两个都?
语句 2 将不会运行,因此不会引发异常
该块的任何异常try
都将被捕获。这就是为什么对于所有try
/except
子句,将 try 子句限制为必要的绝对最小代码量。同样,这避免了掩盖错误。
1) 如果语句 1 中出现错误,语句 2 会被执行吗?
不,不执行语句 2
2) 语句 1 和语句 2 都出现错误时,Exception 如何处理?它在上面的代码中打印出哪个错误?两个都?
只有语句 1 有机会引发错误,见上文,
注意:如果您希望语句 2 始终执行,您可以使用finally
try/except