例外クラスを次のように構成したいと思うことがよくあります。
# legends.py
class Error(Exception): pass
class Rick(object):
class Error(Error): pass
class GaveYouUp(Error): pass
class LetYouDown(Error): pass
class Michael(object):
class Error(Error): pass
class BlamedItOnTheSunshine(Error): pass
class BlamedItOnTheMoonlight(Error): pass
このパターンが Django ( DoesNotExist
) で使用されているのを見たことがありますが、非常に理にかなっています。ほとんどの人がトップレベルの例外を好むように見えるのはなぜですか?
編集 これらのクラスを用途の広い粒度に使用します。たとえば、次のようになります。
import legends
try:
do_stuff()
except legends.Michael.Error:
blame_it_on_the_boogie()
except legends.Rick.GaveYouUp:
let_you_down()
except legends.Error:
pass
except Exception as e:
raise Hell()