[pymysql] executemany가 실행되지 않을 경우

cateto·2021년 11월 4일
0

숫자세기오류

대부분 스택오버플로우의 글을 읽어보면,
TypeError: not enough arguments for format string
해당 오류에 대해 너의 인자 갯수가 틀린거 아니니???
와 같은 숫자세기 오류가 대부분이었고

혹은 datetime과 관련된 글

이라서 나의 경우와는 다른 경우였다 ㅠㅠ

사실 근데 어제부터 뭔가 놓치고 있다는 생각이 들어서 오늘 아침에 다시 해봤는데

기초적인 실수였다는 것!!!
executemany는 두개의 파라미터를 요구한다. 하나는 query String이고, 하나는 iterable한 list.( 그 안에 있는 데이터는 '%s'로 포맷팅하려는 인자 갯수만큼의 length를 가진 tuple혹은 list 여야 함)

그러나 스팸데이터를 필터링하는 과정에서 [] 비어있는 list들이 있었고,
인터프리터 언어인 파이썬은 정직하게
TypeError: not enough arguments for format string
오류를 내뱉은 것이다.

당연히,,, 인자 갯수는 3개인데 0개를 보내는 리스트가 있었으니 오류를 내뱉었고

try:
	어쩌구
except:
	어쩌구

로 예외처리도 해놓지 않았기 때문에 그냥 오류를 내뱉고 끝난 것이다.

executemany를 쓰려고 했으면 두번째 파라미터인 list에 append할때 애초에 length가 0이었으면 추가하지 않았어야 하고,
혹은 execute함수를 활용해서 데이터를 1건씩 넣다가 데이터가 없으면, 혹은 typeError가 발생하면 예외처리를 해서 프로세스가 계속 진행되도록 했어야 했다.

이렇게 오류가 발생하면 내 뇌의 방향은

쿼리가 잘못된건가?

오타가 난건가?

버전오류인가?

아니면 알 수 없는 원인으로 내 프로그램에서만 이러는 건가?

이런식으로 흘러가게 되는데

사실은 원칙에 맞게 프로그래밍하면 되었다는것 ;;;

함수를 쓸때 뭘 요구하는지 다시금 생각해야겠다는 계기가 되었다.

어제 오후 5시 ~ 오늘 오전 9시까지의 고민 해결!

profile
Curious for Everything

0개의 댓글