Czy istnieje standardowy sposób korzystania z łańcuchów wyjątków w języku Python? Podobnie jak wyjątek Java "spowodowany"?Łańcuch wyjątków w języku Python
Oto niektóre tła.
Mam moduł z jednej głównej klasy wyjątków DSError
:
class DSError(Exception):
pass
Gdzieś w tym module nie będzie:
try:
v = my_dict[k]
something(v)
except KeyError as e:
raise DSError("no key %s found for %s" % (k, self))
except ValueError as e:
raise DSError("Bad Value %s found for %s" % (v, self))
except DSError as e:
raise DSError("%s raised in %s" % (e, self))
Zasadniczo ten fragment powinien rzucać tylko DSError i powiedz mi, co się stało i czemu. Chodzi o to, że blok try może rzucać wiele innych wyjątków, więc wolałbym, jeśli mogę zrobić coś takiego:
try:
v = my_dict[k]
something(v)
except Exception as e:
raise DSError(self, v, e) # Exception chained...
Jest to standardowy sposób pythonic? Nie widziałem łańcuchów wyjątków w innych modułach, więc jak to zrobić w Pythonie?
Woah, Dzięki @jamylak! Naprawiłeś moje cytaty, zanim je nawet zobaczyłem :-) – Ayman
Tak i musiałem dodać niepotrzebne słowo, ponieważ SO nie pozwoliło mi wprowadzić tych * małych zmian * :( – jamylak
Co chcesz, aby wyjście było? t powiedzieć, czy rzeczywiście chcesz użyć śledzenia stosu oryginalnego wyjątku, czy też chcesz go ukryć i mieć własny wyjątek z pojedynczą wiadomością, która podsumowuje oryginalny wyjątek? – BrenBarn