파이썬에서 세 개의 명명 된 매개 변수 (** args)를 허용하는 루틴이 있지만이 세 개 중 두 개를 모두 채워야한다고 가정합니다. 하나만 채워지면 오류입니다. 세 가지 모두있는 경우 오류입니다. 어떤 종류의 오류가 발생합니까? RuntimeError, 특별히 생성 된 예외 또는 다른 것?** args에 전달 된 인수의 수가 잘못된 경우 발생시키는 예외는 무엇입니까?
답변
파이썬의 빌트인 예외 클래스를 서브 클래스화할 수 있다는 것을 기억하십시오. (그리고 TypeError
은 여기에 올릴 내장 된 예외 클래스가 될 것입니다. 이것은 인수의 수가 서명과 일치하지 않으면 파이썬이 제기하는 것입니다. 서명에 *a
또는 **k
이없는 경우). 나는 모든 패키지 나는 그런 문제 상황을 감지 할 때
class WrongNumberOfArguments(thispackage.Error, TypeError):
그럼, raise WrongNumberOfArguments
을 거라고 :, 필요에 따라 그 class Error(Exception)
자신의 다음 특정 예외가 적절하게 상속 증식 할 수 예컨대을 정의 보내고 있습니다.
이런 식으로이 패키지를 알고있는 모든 발신자는 패키지와 관련된 오류를 처리해야하는 경우 thispackage.Error
을 잡을 수 있으며 다른 발신자 (아마도 전화 체인에서 더 높은 전화)가 더 일반적인 TypeError
"함수 호출에서 사용 된 인수의 잘못된 번호"와 같은 오류를 처리합니다.
나는 특정한 것을 만들 것이다. 당신이 만든 특수한 상황이므로 catch하고 특별한 예외를 처리 할 수 있습니다 :)
프로그래머가 오류라고 말한 것처럼 (AssertionError :
)def two(**kwargs):
assert len(kwargs) == 2, "Please only provide two args"
BTW, 이름이 지정된 인수가 3 개인 경우 ** kwargs는 이상한 방법입니다. 수 있습니다 더 자연 :
def two(a=None, b=None, c=None):
pass
나는 ValueError를, 또는 그 서브 클래스 사용합니다 : A가 내장 된 작동 또는 기능 권리 유형 있지만 부적절한 값을 갖는 인수를 수신하고 상황이 때 "제기를 IndexError와 같은보다 정확한 예외로 설명되지 않습니다. "
정확히 2가 필요한 경우 3 또는 1 값을 전달하면 모든 인수를 단일 튜플로 간주하는 경우 기술적으로 부적절한 값이됩니다 ... 적어도 내 의견으로는! :)
왜 파이썬이하지 않는가?
>>> abs(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: abs() takes exactly one argument (3 given)
맞춤 예외를 권장합니다. 좋아요 :
class NeedExactlyTwo(ValueError):
pass
코드에서 raise NeedExactlyTwo
수 있습니다.
이 기능을 문서화 문자열에 문서화하십시오.
- 1. larg xargs : 전달 된 인수의 최대 크기?
- 2. Java에서 함수에 전달 된 여러 인수의 서식 지정
- 3. 명명 된 인수의 밑줄
- 4. 루비 - 인수의 잘못된 번호 (1 0)
- 5. Silverlight 초기화시 예외는 무엇입니까?
- 6. vb.net에서 StackOverFlow 예외는 무엇입니까?
- 7. 예외는
- 8. 이상한 예외는 무엇입니까?
- 9. C# 여기서 예외는 무엇입니까?
- 10. 네트워크를 통해 전송 된 열 수가 중요합니까?
- 11. 함수에 전달 된 경우 배열의 크기를 결정하십시오.
- 12. UnhandledExceptionFilter를 사용하여 호출 스택이 주어진 경우 예외는 무엇입니까?
- 13. 시나, MongoMapper 및 빌더 (0 1) 인수의 잘못된 번호
- 14. 타이머로 이벤트를 발생시키는 방법은 무엇입니까?
- 15. 디렉토리의 파일 수가 변경된 경우 버튼에 알립니다.
- 16. 이 스레드/페인트 예외는 무엇입니까?
- 17. 사전에 키를 중복하는 경우 오류를 발생시키는 방법
- 18. DOMSubTree 내의 스타일 속성이 변경된 경우 WebKit이 발생시키는 이벤트는 무엇입니까?
- 19. 템플릿 인수의 변수 이름은 무엇입니까?
- 20. StyleConstants.setBold의 boolean 인수의 의미는 무엇입니까?
- 21. boost :: function 인수의 기본값은 무엇입니까?
- 22. mysql에서 -u 인수의 목적은 무엇입니까?
- 23. 중요한 매개 변수/종속성이 누락 된 경우 throw 할 예외는 무엇입니까?
- 24. facebook 통합을 잘못된 페이지로 전달
- 25. 레일 3하면 ArgumentError : 인수의 잘못된 번호 (1 3)
- 26. NDepend 쿼리가 경고를 발생시키는 경우 어떻게 자동으로 nant 빌드를 실패합니까?
- 27. IOError : [Errno 22] clock()이 전달 된 잘못된 인수
- 28. VS2010 단위 테스트 - throw 된 예외는 공백입니다
- 29. 함수 인수의 양을 얻으십시오.
- 30. 핫스팟이 pulseaudio 예외를 발생시키는 이유는 무엇입니까?
다중 상속을 멋지게 사용하는 예입니다. 감사. –