안녕하세요? 최근에 QGIS 3.22.2 버전을 설치하고 나서 SAGA 툴박스에서 다음과 같은 경고 메시지를 경험했습니다. 해당 내용을 QGIS 깃허브에 제보(https://github.com/qgis/QGIS/issues/46837)하고 여러 감사한 답변들을 받았는데요, 이중 경고 메시지를 비활성화할 수 있는 방법 하나를 정리해 보고자 합니다.
방법은 간단한데요, 경고 메시지를 표시하는 해당 소스코드를 주석 처리하는 것입니다.
Andrea Giudiceandrea(안드레아 주디체안드레아) 님이 해당 코드의 위치를 알려주셨습니다!
'C:\Program Files\QGIS 3.22.2\apps\qgis\python\plugins\sagaprovider' 폴더에서 'SagaAlgorithmProvider.py'를 수정합니다. *Permission denied 시 해당 파일을 (D:)에 복사해서 작업 후 붙여넣기 하시면 편리합니다.
아래 warningMessage(self) 함수를 탐색한 후,
관련 소스코드 3줄을 아래와 같이 주석 표시하시면 됩니다. 간단하죠?!
이제 경고 메시지가 표출되지 않습니다. 차기 버전에서 조치가 있지 않을까 기대해 봅니다.
IndentationError: expected an indented block 오류 시 체크사항
SagaAlgorithmProvider.py 내부는 아래와 같은 클래스(class)로 정의된 상태입니다.
class SagaAlgorithmProvider():
def __init__(self):
oldSAGA = False
def warningMessage(self):
if self.oldSAGA:
print("Hello, warning!")
return ''
# SagaAlgorithmProvider 클래스 객체
warningT = SagaAlgorithmProvider()
warningT.oldSAGA = True; warningT.warningMessage()
위 코드를 실행하면 아래와 같은 출력결과를 얻을 수 있는데요, 여기서 'Hello, warning!'만 삭제하는 것이 우리가 해주는 주석 처리입니다.
Hello, warning!
''
해당되는 소스코드만 주석 처리한다면 원하는 결과값을 얻을 수 있습니다. 아래는 주석 처리과정에서 경험할 수 있는 오류 유형 2가지를 정리해 봤습니다.
class SagaAlgorithmProvider():
def __init__(self):
oldSAGA = False
def warningMessage(self):
# if self.oldSAGA:
# print("Hello, warning!")
return ''
# SagaAlgorithmProvider 클래스 객체
warningT = SagaAlgorithmProvider()
warningT.oldSAGA = True; warningT.warningMessage()
''
(오류1) 클래스 함수에서 return ''까지 주석처리할 경우 아래 'IndentationError(들여쓰기 오류)'를 경험하실 수 있습니다. 실제로는 들여쓰기 문제가 아니기 때문에 오히려 헷갈리실 수 있습니다.
class SagaAlgorithmProvider():
def __init__(self):
oldSAGA = False
def warningMessage(self):
# if self.oldSAGA:
# print("Hello, warning!")
# return ''
# SagaAlgorithmProvider 클래스 객체
warningT = SagaAlgorithmProvider()
warningT.oldSAGA = True; warningT.warningMessage()
Input In [3]
warningT = SagaAlgorithmProvider()
^
IndentationError: expected an indented block
(오류2) 아래와 같이 주석 들여쓰기를 안한 경우에도 'IndentationError(들여쓰기 오류)'가 발생됩니다. 이런 경우, 일반 소스코드와 동일하게 주석에서도 들여쓰기를 적용해 주시면 됩니다.
class SagaAlgorithmProvider():
def __init__(self):
oldSAGA = False
def warningMessage(self):
'''
if self.oldSAGA:
print("Hello, warning!")
'''
return ''
# SagaAlgorithmProvider 클래스 객체
warningT = SagaAlgorithmProvider()
warningT.oldSAGA = True; warningT.warningMessage()
Input In [4]
'''
^
IndentationError: expected an indented block
아래 화면은 제가 의도적으로 'IndentationError'를 발생시켜본 것입니다. 아래 화면을 접하시더라도 당황하지 마시고 내가 주석을 필요한 부분만 적용했는지, 문법에 맞게 처리했는지, 다시 한 번 체크해보시면 좋겠습니다.