표 안에 텍스트를 제외한 일반 텍스트만 추출 코드 무한 루프

개발자 포럼에 올라와 있던 코드를 그대로 사용중이었는데요!
특정 한글 파일(10개 중에 1개 꼴로) 텍스트 추출 코드 동작 시 빠져나오지 못하고 무한루프를 돌아 버리더라고요.
다음 코드에서 그런 문제가 발생할 원인이 될만한 곳이 있나요?

import re

def extract_text_exclude_table(hwp):
  txt = ""
  try:
    # 문서 전체를 텍스트 포함 모든 컨트롤을 탐색함
    hwp.InitScan(0x000F, 0x0077)

    while True:
      textdata = hwp.GetText()
      if textdata[0] == 1:
        break

      # 201 = moveScanPos로 GetText 실행한 위치로 이동함
      hwp.MovePos(201, 0, 0)

      # 현재 위치의 상위 컨트롤을 구함
      parent_ctrl = hwp.ParentCtrl

      if parent_ctrl == None:  # 일반 문장(paragraph)
        txt = txt + textdata[1]
        txt.split("\r\n")
        continue

      ctrlch = parent_ctrl.CtrlCh

      # 11 = 그리기 개체, 표
      if ctrlch == 11:
        # 상위 컨트롤이 '표'
        if parent_ctrl.CtrlID == "tbl":
          continue

      txt = txt + textdata[1]
  finally:
    hwp.ReleaseScan()

  return re.sub(r'(\n\s*){3,}', '\n\n\n', txt)

아니면 추출이 안되는 특정 한글 파일에 문제일까요?

1개의 좋아요

안녕하세요

재현되는 문서를 공유해주실 수 있을까요?
디버깅을 하셔서 어디서, 어떤 값 때문에 무한 루프가 도는지 확인하셔야 할 것 같습니다 :sob:

textdata[0] == 1 조건을
2,3,4,5가 아닐 때로 변경하고 확인하시면 좋을 것 같습니다.

감사합니다.

1개의 좋아요

제가 짠 코드가 아니라서 자세히 몰랐는데
아마 지적해주신 부분에서
문서 마지막에 textdata[0] == 0일 때, 무한루프를 도는 것 같습니다.

1개의 좋아요