2012-04-24 1 views
2

Я хотел бы, чтобы вложить Exception подкласс в классе моей, например, так:Nest собственный класс исключений в классе? (Python)

class Foo(object): 

    def bar(self): 
     #does something that raises MyException 

    class MyException(Exception): 
     pass 

Таким образом, у меня только импортировать Foo (а не MyException) при вызове бар() из другого модуля. Но то, что я ниже не работает:

from foo_module import Foo 

foo = Foo() 

try: 
    foo.bar() 
except Foo.MyException as e: 
    print e 

Python дает эту ошибку:

type object 'Foo' has no attribute 'MyException'

Есть ли способ сделать это?

+1

Какую версию Python вы используете? Я только что выпустил IDLE для Python 2.7.2, определил класс с вложенным классом исключений и метод, который поднял вложенное исключение, а затем попробовал блок try/except, и все сработало нормально. – Ben

+0

Вы делали «импорт foo_module» или «из foo_module import Foo»? –

+0

Я фактически не создал отдельный модуль и не импортировал его. Но я не вижу, как это может измениться. Либо объект «Foo» имеет атрибут «MyException», либо нет. По-видимому, вложенный класс-блок, возможно, не стал атрибутом внешнего класса для какой-то неясной причины, но импорт из другого модуля никак не повлияет на его атрибуты. Я подозреваю, что что-то еще не так. Можете ли вы построить тестовый пример * small *, который дает вам эту ошибку, когда вы запускаете ее и вставляете ** полное ** содержимое обоих файлов здесь? – Ben

ответ

6

Учитывая содержание t.py из:

class Foo(): 
    def RaiseBar(self): 
    raise Foo.Bar("hi") 
    class Bar(Exception): 
    pass 

и запустив на питона терминале:

>>> import t 
>>> x = t.Foo() 
>>> try: 
...  x.RaiseBar() 
... except t.Foo.Bar as e: 
...  print e 
... 
hi 

не является ли это именно то, что вы искали?

Не уверен, что вы сделали неправильно с вашей стороны, я предлагаю вам более внимательно изучить код.

+0

Да, вы были правы. Мой код был немного от примера, который я предоставил. Виноват. : / –

 Смежные вопросы

  • Нет связанных вопросов^_^