2012-04-24 2 views
2

내가 그렇게처럼, 내 자신의 클래스 내에서 둥지에 예외 서브 클래스를 싶습니다클래스 내에 사용자 정의 예외 클래스를 중첩합니까? (파이썬)

class Foo(object): 

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

    class MyException(Exception): 
     pass 

이 방법은, 난 단지 푸 (그리고 MyException를) 가져가 줄을 호출 할 때() 다른 모듈로부터. 하지만 제가 아래가 작동하지 않습니다

type object 'Foo' has no attribute 'MyException'

이 할 수있는 방법이 있나요 :

from foo_module import Foo 

foo = Foo() 

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

파이썬이 오류를 준다?

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 

이 정확하지가 당신이 찾고 있던 무슨

+1

어떤 Python 버전을 사용하고 있습니까? 방금 Python 2.7.2에서 IDLE을 실행하고 중첩 예외 클래스가있는 클래스를 정의한 다음 중첩 예외를 발생시킨 메서드를 시도한 다음 try/except 블록을 시도하고 모든 것이 올바르게 작동했습니다. – Ben

+0

"import foo_module"또는 "foo_module import Foo"를하고 계셨습니까? –

+0

저는 실제로 별도의 모듈을 설치하지 않고 가져 왔습니다. 그러나 그것이 어떻게 변화를 가져올 수 있는지 나는 알 수 없다. 'Foo' 객체는 'MyException' 속성을 가지고 있거나 그렇지 않습니다. 어쩌면 중첩 된 클래스 블록은 애매한 이유로 외부 클래스의 속성이되지 않을 수도 있지만 다른 모듈에서 가져 오는 방법이 없으므로 속성에 어떤 영향을 미치게됩니다. 나는 다른 것이 잘못 될 것으로 생각합니다. 이 오류를 실행하고 두 파일의 전체 ** 내용을 여기에 붙여 넣을 때 * 작은 * 테스트 케이스를 만들 수 있습니까? – Ben

답변

6

은의 t.py의 내용을 감안할 때?

당신이 뭘 잘못했는지 확실하지 않으므로 코드를 더 자세히 검토하는 것이 좋습니다.

+0

예, 당신이 옳았습니다. 내 코드는 내가 제공 한 예제에서 약간 벗어났다. 내 잘못이야. : / –