2016-07-27 8 views
0

데이터베이스 연결 개체가 있는데 쓰기 작업 (함수)에 대한 최대 호출 수를 제한하거나 적용하려고합니다. 테스트에서 조롱했고, write 메소드를 오버라이드하여 호출을 모니터링했다.함수에 대한 초과 호출 플래그에 가장 적합한 Exception 클래스는 무엇입니까?

그러나 최대 허용 개수 (예 : 2) 이상으로 호출 될 때 어떤 오류가 발생하는지 혼란 스럽습니다. docs을 살펴 보았지만 적절한 내용을 찾지 못했습니다. (따라서, 그것이 제시하는대로) 나는 RuntimeError을 사용했지만, 그것이주는 메시지 (내가 명시하는 메시지가 아니라, 클래스 자체가 전달하는 암묵적인 의미)에 대해 충분히 확신하지 못했습니다. AttributeError은 아주 잘 맞는 것 같지만 다른 것은 정확함에 가깝습니다.

다른 내부 표준 예외 클래스가 더 적합합니까?

TypeError: function-name takes exactly n arguments (m given) 

그래서 파이썬을 미러링 할 동일 할 수있다 : 당신이 함수에 너무 많은 인수를 제공하는 경우

+0

나는 사용자 정의 예외를 만들 것입니다 ... 나는 왜 당신이 내장을 원할 것인지 잘 모르겠습니다. – SuperSaiyan

+0

@SuperSaiyan 네, 저의 최후의 수단입니다. 나는이 라인을 질문에 추가해야했다. :). – 0xc0de

+0

@ 0xc0de : 왜 전화 수를 계산 하시겠습니까? 프로덕션 환경에서이 코드를 실행 하시겠습니까? 왜냐하면 ** MAX ** 통화 횟수 이후에는 항상 예외를 던질 수있는 방법으로 호출 수를 제한하기 때문입니다. 환경을 다시 시작할 때까지이 방법을 열지 않습니다. –

답변

0

당신이 뭔가를 얻을. raise을 호출 할 때 예외 문자열이 파이썬이 제기 한 문자열과 구별 될 수 있도록주의를 기울여야합니다. 그렇지 않으면 정품 TypeError을 마스크 할 수 있습니다.

의견을 나눕니다. 일부에서는 사용자 정의 Exception 클래스가 필요하지 않다고 말합니다. 개인적으로 나는 혼란이있을 수있는 곳이 있다고 생각합니다. 자신의 예외를 만들기 매우 간단합니다, 당신이 필요로하는 모든입니다

class MyException(TypeError): 
    pass 

지금 당신은 어떤 발생하지 파이썬에서 코드에서 온 것을 알고있다. 네임 스페이스가 접두사로 붙어있는 모듈이나 클래스에이 태그를 넣는 것을 기억하십시오. MyClass.MyException.