가끔 클래스를 사용하다 보면, 선언과 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의 선언 없이 해당 클래스의 함수를 사용하려 했기 때문에 발생하는 오류를 해결해준 것입니다.



<다른 Type Error는 차차 업로드 예정...>


+ Recent posts