2014-06-05 4 views
3

try-except 구조를 사용하여 Python에서 사용자 정의 예외를 사용하는 방법을 이해하려고합니다.Python의 사용자 정의 예외

# create custom error class 
class CustomError1(Exception): 
    pass 

내가 그렇게처럼 사용하려고 : 여기

사용자 정의 예외의 간단한 예입니다

# using try-except 
def fnFoo1(tuple1, tuple2): 
    try: 
     assert(len(tuple1) == len(tuple2)) 
    except AssertionError: 
     raise(CustomError1) 
    return(1) 
fnFoo1((1,2), (1, 2, 3)) 

이것은 CustomeError1 제기뿐만 아니라 내가하고 싶은 AssertionError를 제기 CustomError1에 포함될 것입니다.

다음은 내가 원하는 것을, 그러나 예외가 처리해야하는 방식이 될 것 같지 않습니다.

# use the custom error function without try-catch 
def fnFoo2(tuple1, tuple2): 
    if len(tuple1) != len(tuple2): raise(CustomError1) 
    print('All done!') 
fnFoo2((1,2), (1, 2, 3)) 

다른 예외를 숨기는 사용자 지정 예외를 작성하는 방법은 무엇입니까?

+0

다음을 보시기 바랍니다 : ankurankan.github.io/blog/2014/06/03/custom-assert-method-in-python/ –

+0

어떤 버전의 Python 3을 사용하고 있습니까? 나중의 3.x 버전에서 예외 동작에 몇 가지 변경 사항이 있음을 기억합니다. – BrenBarn

+0

@brenbarn python 3.3.1 – tchakravarty

답변

4

PEP 409에 따르면 당신은 raise CustomError1 from None를 사용하여 원래의 예외 상황을 억제 할 수 있어야한다. 이것은 또한 here에 설명되어 있습니다 :

raise new_exc from None를 사용

효과적으로이 기능은 파이썬 3.3에서 추가되었다

표시 목적에 대한 새로운 하나 기존의 예외를 대체합니다. 3.0에서 3.2 버전에서는 원래 예외 (아야)를 숨길 수 없었습니다.

+0

최고 감사합니다. 시도하고 성취하는 것이 그렇게 단순한 것처럼 보였기 때문에 나는 무언가를 놓쳤다 고 생각했습니다. – tchakravarty