py/vm: Don't emit warning when using "raise ... from None".

"Raise SomeException() from None" is a common Python idiom to suppress
chained exceptions and thus shouldn't trigger a warning on a version of
Python that doesn't support them in the first place.
pull/12621/head
Matthias Urlichs 2023-10-06 21:02:43 +02:00 zatwierdzone przez Damien George
rodzic 5232847771
commit 3fb1bb131f
3 zmienionych plików z 15 dodań i 3 usunięć

Wyświetl plik

@ -1171,8 +1171,10 @@ unwind_return:
ENTRY(MP_BC_RAISE_FROM): {
MARK_EXC_IP_SELECTIVE();
mp_warning(NULL, "exception chaining not supported");
sp--; // ignore (pop) "from" argument
mp_obj_t from_value = POP();
if (from_value != mp_const_none) {
mp_warning(NULL, "exception chaining not supported");
}
mp_obj_t obj = mp_make_raise_obj(TOP());
RAISE(obj);
}

Wyświetl plik

@ -1,6 +1,15 @@
# Exception chaining is not supported, but check that basic
# exception works as expected.
try:
raise Exception from None
except Exception:
print("Caught Exception")
try:
try:
raise ValueError("Value")
except Exception as exc:
raise RuntimeError("Runtime") from exc
except Exception as ex2:
print("Caught Exception:", ex2)

Wyświetl plik

@ -1,2 +1,3 @@
Warning: exception chaining not supported
Caught Exception
Warning: exception chaining not supported
Caught Exception: Runtime