目前尚不完全清楚您要在这里实现什么。您不会收到错误消息,因为您引发了异常,但因为您没有再次捕获它。如果您不想要错误消息,则需要捕获异常。然后,如果您只想打印消息“嘿”,您可以从异常 args 中获取它。
try:
division('a', 2)
except ValueError as e:
print(e.args[0])
raise ... from None 已经摆脱了第一个异常,所以你只会看到你在except 块中引发的ValueError division,但是如果出现异常,它就会一直出现在命令中行,必须以某种方式通知您,Python 将通过打印错误消息来做到这一点。
现在,您可以根据需要更改未捕获异常的默认行为。例如,这将为您未明确捕获的所有异常打印args[0]。
import sys
def handle_exception(exc_type, exc_value, exc_traceback):
print('handler:', exc_value.args[0])
sys.excepthook = handle_exception
sys.excepthook 是 Python 会为未捕获的异常调用的函数。所以如果你这样做了
try:
division('a', 2)
except ValueError as e:
print('caught:', e)
division('a', 2) # not caught
第一个除法异常被捕获,处理程序没有被调用,第二个没有被捕获并且处理程序被使用(并且只会打印消息'hey')。
不过,改变所有未捕获异常的处理方式并不是一个好主意。您可能只想处理自己的行为,并将默认行为用于其他任何事情。
但是,正如我所说,我并不完全清楚您要达到的目标,因此上述所有内容可能与问题完全无关。