我有一个简单的Python代码,其中有一个try块,如果存在,它会打开一个文件,并打印一条消息(M!(,如果不存在,则退出。除外块打印不同的消息(M2(。不知什么原因,它同时打印M1和M2。以下是通过交互式客户端执行的代码,但即使在非交互式模式下执行,也会看到相同的结果:-
Python 3.7.4 (default, Feb 7 2020, 04:54:24)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> os.path.isfile("test.txt")
False
>>> try:
... if os.path.isfile("test.txt"):
... open("test.txt")
... else:
... print("file not found")
... sys.exit()
... except:
... print("something else went wrong")
...
file not found
something else went wrong
请告诉我是否有人能破译发生了什么?
try
块一直执行到引发异常为止。当这种情况发生时,except
块执行。因此,在这种情况下,在打印"file not found"
一段时间后会抛出异常。您可以通过明确地捕获异常来进一步研究这一点:
try:
print("some message")
sys.exit()
except Exception as e:
print(e)
sys.exit
通过引发一个SystemExit
异常退出,该异常是您的裸except
块捕获的。这就是为什么永远不应该有一个空的except
块,而应该始终有except Exception
(或者更具体的异常(。SystemExit
不在Exception
层次结构中,因此可以绕过它。另外:添加日志记录语句,查看是什么导致了您捕获的异常。