私はこのエラーが発生しています:
builtins.TypeError: BaseException から継承しないクラスをキャッチすることは許可されていません
class a(object):
pass
class b(a):
pass
class c(b):
pass
私はこのエラーが発生しています:
builtins.TypeError: BaseException から継承しないクラスをキャッチすることは許可されていません
class a(object):
pass
class b(a):
pass
class c(b):
pass
これは期待どおりに機能します。
class a(Exception):
pass
class b(a):
pass
class c(b):
pass
raise c("my c is bad!")
版画:__main__.c: my c is bad!
この方法で例外の文字列を取得できます。
>>> try:
... raise c('This is C talking to you')
... except c as s:
... print(s)
...
This is C talking to you
編集 あなたの質問とコメントにはほとんどないので、次の複数のクラス/サブクラスを使用する方法がありますException
。
>>> x=1
>>> try:
... if x==1: raise b('x is 1!!!')
... else: raise c('I guess x is not 1')
... except (b,c) as s:
... print(s)
...
x is 1!!!
ただし、クラスのさまざまなインスタンスを 1 つのクラスのサブクラスと混同している場合もあります。次のようなこともできます。
class MyException(Exception):
def __init__(self,value):
self.value=value
def __str__(self):
return repr(self.value)
# INSTANCES of MyException class:
e1=MyException(1) # the int argument becomes the error
e2=MyException('22') # another instance with a string
e3=MyException({1:33}) # third instance with a dictionary as the result
def f(e):
try:
raise MyException, e
except MyException as s:
return s
for e in (e1,e2,e3):
print(f(e))
プリント:
1
'22'
{1: 33}
e1、e2、e3、およびクラス MyException の異なるインスタンスに注意してください。raise
クラスとそのクラスのインスタンスを例外として呼び出すことをサポートしています。
階層型エラー クラス (サブクラスでの一度のエラー) を真に探している場合は、 Python ドキュメントの主題を次に示します。私はあなたがそうではないと思います。