본문 바로가기
아래아한글 자동화/python+hwp 중급

pythonwin에서 COM MakePy Utility 목록이 비어있는 오류 해결방법

by 일코 2021. 12. 14.

파이썬으로, 특히 pywin32 모듈로 엑셀이나 아래아한글 자동화를 하시는 분들 계시죠? 저를 포함해서요.

종종 여러 가지 알 수 없는 문제들을 만나는데, 국내에는 파이썬으로 win32를 깊게 다루는 포스팅이 많지 않아서 해결에 수일이 걸리기도 하고, 결국 그 지점에서 포기하는 분들도 많습니다. (가장 많은 오류는 gen_py 관련이 아닌가 생각해봅니다.) 관련 커뮤니티가 만들어지고 활성화되면 참 좋을텐데요.

 

하여튼 오늘은 제가 새 노트북(무려 XPS13)을 24개월 할부로 지른 기념으로 파이썬도 설치하고 pywin32도 설치하고 교육자료를 준비한다고 분주했는데, 또 처음 보는 오류가 한 번 나타났습니다. pythonwin을 실행해서 MakePy Utility 메뉴를 선택했는데 아래와 같은 오류가 뜨는 거예요;

File "C:\Python\Python3101_64\Lib\site-packages\pythonwin\pywin\dialogs\list.py", line 68, in OnInitDialog
    self.FillList()
  File "C:\Python\Python3101_64\Lib\site-packages\pythonwin\pywin\dialogs\list.py", line 102, in FillList
    self.itemsControl.InsertColumn(index, itemDetails)
TypeError: 'float' object cannot be interpreted as an integer
win32ui.error: OnInitDialog() virtual handler (<bound method ListDialog.OnInitDialog of <pywin.dialogs.list.ListsDialog object at 0x000001CE18585C90>>) raised an exception

 

라이브러리 목록은 하나도 안 뜨고 저 오류메시지만 길쭉하게...

익숙해질 만 하면 나타나는 새로운 오류 때문에 오늘도 즐겁습니다.

오류를 자세히 읽어보니, 해결의 실마리가 잡힐 듯도 한데요.

 

오류메시지 5번째 줄 TypeError 내용을 읽어보니까, int가 들어와야 할 자리에 float가 들어왔다고 하네요. 오류가 발생한 라인은

self.itemsControl.InsertColumn(index, itemDetails)

인데요. 맥락상 index는 실수가 들어올 가능성이 거의 없을 것 같고, 아마 itemDetails가 문제가 된 것 같은데, 이건 어디서 정의된 변수인지, list.py 파일을 한 번 찾아들어가보겠습니다. 102번째 라인 근처라고 하네요.

 

for col in self.colHeadings:
            itemDetails = (commctrl.LVCFMT_LEFT, width / numCols, col, 0)
            self.itemsControl.InsertColumn(index, itemDetails)

itemDetails라는 튜플에 대한 정의인데, LVCFMT_LEFT는 상수니까 문제가 없었을 것 같고, 우측의 col도 enum값이라면 float형일 리가 없고, 딱 봐도 나누기 연산자가 들어있는 width / numCols 부분이 문제가 된 것 같네요. 우선 대충 때우기 방식 같지만... width / numCols를 int 함수로 감싸줬습니다ㅜ.. 

itemDetails = (commctrl.LVCFMT_LEFT, int(width / numCols), col, 0)  # 이렇게 수정함

 

다행히 정상적으로 실행이 되네요.

정확한 원인이 무엇이었는지는 잘 모르겠지만, 추정컨대 디스플레이 배율이나, 해상도 때문에 발생한 문제? 뭐 그런 게 아니었을까 생각해봅니다.

'이게 왜 안되지?' 했다가, '이게 왜 되지?' 했다가...

사실 오늘 pythonwin을 실행했던 이유는, 엑셀자동화 관련 강의자료를 준비하면서 msoAlign 관련 상수값을 찾다가 Microsoft Office 16.0 Object Library가 필요하겠다 싶어서였는데요. 문제가 금방 해결되어서 다행입니다.

 

오랜만에 포스팅을 올리네요. 네이버 블로그도 운영하기 귀찮고ㅜ

역시 제가 자동화를 좋아하게 된 건 워낙 게을러서가 맞는 것 같습니다ㅜㅜㅜ

 

여러분들도 너무 열일하지 마시고,

부자 되세요^^

댓글