J E*_*E K 5 python exception python-3.x python-3.11
考虑以下代码块:
class MyException(Exception):
__hash__ = None
try:
raise ExceptionGroup("Foo", [
MyException("Bar")
])
except* Exception:
pass
Run Code Online (Sandbox Code Playgroud)
应该except*捕获任意数量的任何类型的异常,并将其作为一个抛出ExceptionGroup(或者如果单独抛出,则捕获任何类型的单个异常)。相反,TypeError在处理我们的过程中发生了未处理的情况ExceptionGroup,据称是在我们模块的“第-1行”:
+ Exception Group Traceback (most recent call last):
| File "C:\Users\Josep\AppData\Roaming\JetBrains\PyCharmCE2022.2\scratches\scratch_62.py", line 6, in <module>
| raise ExceptionGroup("Foo", [
| ExceptionGroup: Foo (1 sub-exception)
+-+---------------- 1 ----------------
| MyException: Bar
+------------------------------------
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Josep\AppData\Roaming\JetBrains\PyCharmCE2022.2\scratches\scratch_62.py", line -1, in <module>
TypeError: unhashable type: 'MyException'
Run Code Online (Sandbox Code Playgroud)
except* Exception(如果我们用更具体的东西替换,比如except* ValueError或except* MyException,也会发生同样的事情。如果我们尝试只提高一个单数MyException并用 正常捕获它except MyException,那就可以了。)
普通except子句不关心异常是否可散列。我找不到except*PEP-654 或 Python 3.11 发行说明中记录的这个怪癖。这是预期的行为,还是只是我正在使用的 Python 实现中的一个错误?
(对于那些想要重现此行为的人,我在 Windows 上使用 Python 3.11.0,64 位。)