[当我尝试使用exit()
功能时,由于异常该代码没有停止,如何取消它?
def start(number):
try:
print(9 ** number)
exit()
except:
print("problem")
start()
您正在捕获所有异常,包括SystemExit
。
使用except Exception
来捕获所有内置的,不存在的异常。
在您的特定情况下,我建议您只捕获一个TypeError
,因为这是您希望对number
的错误类型抛出的内容。也就是说,在将exception-block中的无参数调用固定为start()
之后,这将引发TypeError
本身。
您需要查看手册中的Exception Hierarchy。基础异常被适当地命名为BaseException
,其他所有异常都继承自该异常。 BaseException
有四个直接后代:SystemExit
,KeyboardInterrupt
,GeneratorExit
和Exception
。
exit
引发SystemExit
异常,您正在使用无条件except
子句捕获该异常。通常,您只想捕获Exception
及其任何后代,这是所有其他例外。因此:
try:
...
except Exception:
...
这将允许其他三种异常按需冒泡,并允许您捕获更具体的异常树。最好只捕获尽可能多的特定类型。