During handling of the above exception, another exception occurred
除了捕获JSON解析错误外,我还尝试了以下操作:
1 2 3 4 5 | with open(json_file) as j: try: json_config = json.load(j) except ValueError as e: raise Exception('Invalid json: {}'.format(e)) |
为什么要打印出
1 2 3 4 5 6 7 8 | json.decoder.JSONDecodeError: Expecting ',' delimiter: line 103 column 9 (char 1093) During handling of the above exception, another exception occurred: Traceback (most recent call last): <....> raise Exception('Invalid json: {}'.format(e)) Exception: Invalid json: Expecting ',' delimiter: line 103 column 9 (char 1093) |
目前,在另一个捕获的异常中引发
1 | raise Exception('Invalid json: {}'.format(e)) |
到
1 | raise Exception('Invalid json: {}'.format(e)) from None |
生成您的最终代码。
1 2 3 4 5 | with open(json_file) as j: try: json_config = json.load(j) except ValueError as e: raise Exception('Invalid json: {}'.format(e)) from None |
您应该获得捕获异常所需的结果。
例如
1 2 3 4 5 6 7 8 9 | >>> foo = {} >>> try: ... var = foo['bar'] ... except KeyError: ... raise KeyError('No key bar in dict foo') from None ... Traceback (most recent call last): File"<stdin>", line 4, in <module> KeyError: 'No key bar in dict foo' |
对不起,我不能给你一个解释,为什么这是具体的工作,但它似乎做的诀窍。
更新:似乎有一个PEP文档解释如何在异常警告中抑制这些异常。
由于您在
换句话说,通常使用
如果这是你想要的行为,那真的没什么好担心的。如果您想"摆脱"这条消息,您可以在不引发另一个异常的情况下将某些内容写入输出,或者在不使用
正如史蒂文所建议的,你可以做到:
1 | raise Exception('Invalid json: {}'.format(e)) from e |
要打印这两个异常,请执行以下操作:
1 2 3 4 5 6 7 8 9 10 | Traceback (most recent call last): File"tmp.py", line 5, in <module> raise Exception('Invalid json: {}'.format(e)) from e Exception The above exception was the direct cause of the following exception: Traceback (most recent call last): <...> json.decoder.JSONDecodeError: Expecting ',' delimiter: line 103 column 9 (char 1093) |
或者你可以这样做:
1 | raise Exception('Invalid json: {}'.format(e)) from None |
抑制第一个异常,只记录
顺便说一句,做一些像