2010-07-12 3 views
10

인수없이 예외를 발생시키는 가장 좋은 방법을 알고 싶습니다.Python, 인수없이 예외 재 배열

try: 
    raise KeyboardInterrupt 

(http://docs.python.org/tutorial/errors.html CHAP 8.6.) 및 장고 또는 Google 코드 같은 일부 differents의 코드에서, 당신이 볼 수 있습니다 : 공식 파이썬 문서에서 , 당신이 볼 수

def AuthenticateAndRun(self, username, password, args): 
    raise NotImplementedError() 

(http://code.google.com/p/neatx/source/browse/trunk/neatx/lib/auth.py)

인수가없는 동안 발생하는 경우는 예외입니다. 인수없이 예외를 구현하는 목적은 무엇입니까? 첫 번째 사건이나 두 번째 사건을 사용해야합니까? 예외 인스턴스 대신 예외 클래스를 올리기 파비앙

답변

3

사전 에서

덕분에 구문을 사용되지 않으며 새로운 코드에서 사용할 수 없습니다.

+0

예외적 인 지원 중단에 대한 자세한 내용은 http://www.python.org/dev/peps/pep-0352/#transition-plan을 참조하십시오. –

+8

나는 당신이 추천하고있는 것을 알아낼 수 없습니다. 귀하의 코드 예제는 ** 할 ** ** 것 같다. 아마도 당신은 *해야 할 일을 보여 주어야 할 것입니다. –

+0

아직 수행해야 할 작업이 확실하지 않습니다. – FrenchKheldar

0

C++와 같은 언어에서는 예외가 아닌 모든 개체를 올릴 수 있습니다. 파이썬은 더욱 제한적입니다. 당신이 시도하는 경우 :

raise 1 

를 당신이 얻을 :

Traceback (most recent call last): 
... 
TypeError: exceptions must be old-style classes or derived from BaseException, not int 

파이썬 프로그래밍 모델에서 당신은 대개 정의,이 고유 인스턴스의 빠른 생성을위한 편리합니다 (대신 인스턴스의 자체 클래스를 사용할 수 있습니다 클래스). 따라서 예외 인스턴스 대신 예외 클래스를 발생시킬 수있는 것은 당연합니다.

그러나 이그나시오 (Ignacio)가 말했듯이, 이는 더 이상 사용되지 않습니다.

또한, 직접 질문하지 일부 측면 참고 :

당신은 또한 몇 가지 코드 자체에 의해 단독으로 인상 볼 수 있었다. 어떤 객체 클래스 또는 아무것도없이. 예외 처리기에서 현재 예외를 다시 발생시키는 데 사용되며 초기 추적을 유지합니다.

3

원하는 형식을 사용할 수 있습니다. 실제 차이점은 없으며 둘 다 Python 2와 3에서 합법입니다. Python style guide은 어느 것을 권장하는지 명시하지 않습니다.


은 "클래스 형식"지원에 조금 더 정보 :

인상 :

try: 
    raise KeyboardInterrupt 

이 양식은 파이썬 2 pep-3109 3. 발췌 모두에서 완벽하게 합법적이다 EXCEPTION은 새로운 예외를 발생시키는 데 사용됩니다. 이 양식에는 두 개의 하위 변형이 있습니다. EXCEPTION은 예외 클래스이거나 예외 클래스의 인스턴스 일 수 있습니다. 유효한 예외 클래스는 BaseException과 그 하위 클래스 인 [5]입니다.EXCEPTION이 서브 클래스 인 경우 예외 인스턴스를 얻기 위해 인수없이 호출됩니다. ...

그것을 클래스이면 인수로 클래스를 인스턴스화 필요할 때, 예외 인스턴스가 얻어 질 것이다

은 또한 Python documentation 설명한다.