-2

私はこのエラーが発生しています:

builtins.TypeError: BaseException から継承しないクラスをキャッチすることは許可されていません

class a(object):
      pass
class b(a):
      pass
class c(b):
      pass
4

1 に答える 1

2

これは期待どおりに機能します。

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 ドキュメントの主題を次に示します。私はあなたがそうではないと思います。

于 2013-01-22T02:17:35.510 に答える