가끔 클래스를 사용하다 보면, 선언과 Type에 대한 에러 때문에 갈필을 못잡을 때가 있습니다.
여기서는 TypeError 중에 missing argument에 대해 이야기해보고자 합니다.
01. TypeError: [여러분의 함수] missing [숫자] required positional argument: [여러분의 함수의 인자값]
TypeError: [여러분의 함수] missing [숫자] required positional argument: [여러분의 함수의 인자값]
위의 에러에서는 분명히 Class를 입력했음에도 불구하고 TypeError로 우리가 인자값에 제대로 된 값을 넣어주지 않았다는 에러 메시지를 출력합니다.
이런 경우 정말 억울하기도 하고, 혹시 내가 잘못 입력한 건 아닌가 하며 시간을 낭비하기도 합니다.
저도 이런 에러 때문에 시간을 많이 잡아먹혔었지요.
예제를 먼저 보도록 합시다.
class 선언
#python 3.x source #FileName : TestClass.py class Test: def __init__(self): print('init') def TestFunc(self, Argument): print('Type of Argument : ', type(Argument)) print('Value of Argument : ', Argument)
main 선언
#python 3.x source #FileName : TestMain.py from TestClass import Test def main(): Data = 0x01234567 Test.TestFunc(Data) if __name__ == "__main__": main()
여기서 class 파일의 8번 째 줄을 보면, self와 Argument라는 인자값을 받는 것을 볼 수 있습니다.
따라서 TestFunc() 함수에서는 self를 제외한 다른 하나의 인자값이 필요합니다.
즉, TestClass의 TestFunc() 함수를 하기 위해 Data라는 값을 Argument 인자값에 넣어주어 실행시켜봅니다.
이때 발생하는 에러 메시지는 다음과 같을 것입니다.
TypeError: TestFunc() missing 1 required positional argument: 'Argument' |
이때의 에러 메시지는 1개의 인자값이 필요합니다, 라는 직역으로 해석이 가능합니다.
하지만 에러가 발생하는 원인은 따로 있습니다.
바로 Class의 선언이 없기 때문입니다.
이러한 에러를 해결하기 위해서는 main 소스를 다음과 같이 수정해볼 수 있습니다.
main 선언(오류 해결)
#python 3.x source #FileName : TestMain.py from TestClass import Test def main(): T = Test() Data = 0x01234567 T.TestFunc(Data) if __name__ == "__main__": main()
오류가 해결된 소스의 7번 줄과 11번 줄을 보면 Test라는 클래스를 따로 선언을 해준 뒤 이를 이용하여 함수를 불러오는 것을 확인할 수 있습니다.
즉, Class의 선언 없이 해당 클래스의 함수를 사용하려 했기 때문에 발생하는 오류를 해결해준 것입니다.
'PYTHON > Python 관련 오류잡기' 카테고리의 다른 글
python의 pip 명령이 들지 않을 때(python pip error) (4) | 2018.07.24 |
---|