2011-02-02 5 views
2

모든 명명 된 매개 변수가 메서드에 전달되었는지 확인해야합니다 (기본값은 필요 없습니다). 다음을 수행하는 것이 가장 좋은 방법입니까?python : 함수 매개 변수 유효성 확인

class X: 
    def func(self, **kwargs): 
    if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'): 
     raise ArgException(kwargs) 
+1

발생시키는 예외가 TypeError의 서브 클래스인지 확인하십시오. 당신이 이것을 원한다면 왜 kwargs를 사용하고 있습니까? 변수를 정상적으로 지정하십시오. –

+0

잘못되었거나 잘못되었습니다. 'def func (self, arg1, arg2, arg3)'를 사용하십시오. –

+0

@S Lott 당신이 제안한 것을 사용 하겠지만, 그 다음에는 논쟁의 순서대로 실수를 저 지르겠습니다. @Glenn Maynard 순서대로 실수를 피하기 위해 명명 된 매개 변수를 사용하고있었습니다 (많은 함수에서 3-6 개의 인수가 있음). 안좋다? – max

답변

5

는 휴의 대답 (즉, 단지 이름을 사용하십시오 위치 인수가) 당신의 최선의 방법이다.

class X(object): 
    def func(self, *, arg1, arg2, arg3): 
     pass 
+0

+1 : '*'강제 키워드 인수에 대해 몰랐다. – max

3
class X(object): 
    def func(self, **kwargs): 
     required = set(['arg1','arg2','arg3']) 
     if not set(kwargs.keys()).issuperset(required): 
      raise ArgException(kwargs) 

그냥 인터프리터가 알아서 할 수 있지만 : 파이썬 2.x를 들어

class X(object): 
    def func(self, arg1, arg2, arg3): 
     pass 
+0

+1 .. 네, 문제. 내가 어떻게 그걸 몰랐는지 모르겠다. .. – max

0

당신이 다른 인수를 허용 하시겠습니까 다음과 같이

파이썬 3.x를 들어

, 당신은 또한 의 옵션은는 (오히려 단지를 허용하는 것보다) 키워드 인자의 사용을 필요로 했는가? 그렇지 않은 경우 :

class X(object): 
    def func(self, arg1, arg2, arg3): 
     pass 

예 경우 : 파이썬의 모든 버전의

class X(object): 
    def func(self, arg1, arg2, arg3, **kwargs): 
     pass 

.