ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [flake8] 파이썬 코드의 오류 확인을 위한 flake8 정적 분석 패키지
    유용한 프로그램 2023. 4. 19. 10:30
    반응형

    파이썬 코드의 오류 확인을 위한 flake8 정적 분석 패키지


    정적 분석(Static Analysis)이라는 말이 있습니다. 흔히 코드리뷰라고 하는 그 말인데, 작성된 코드를 보고 에러가 발생하지 않는지 확인하는 작업이지요. 파이썬(Python)은 내장된 인터프리터(interpreter)가 제법 코드를 잘 파악해 주는 편이지만, 단순 에러 이외의 사항에 대해서 알아채거나, py 파일 전체를 보고 모든 에러를 한번에 파악해 주는 기능까지는 없습니다.

     

     

    그래서, 파일 단위로 모든 에러를 파악하는 등의 정적 분석을 위해서는 별도의 패키지를 사용하는게 편리할 수도 있습니다. 제가 알아본 패키지는 flake8이라는 패키지인데요, 과연 쓸만한 성능을 보여줄지 살펴보도록 하겠습니다.

     

     

    flake8을 사용하기 위해서는 해당 패키지를 설치해 줘야 합니다. $pip install flake8 명령어를 실행해 준다면 설치는 자동으로 진행되고요, 그 다음에는 정적 분석을 할 py 파일을 만들어주면 됩니다. 저는 아래와 같이 에러가 발생하는 코드와 아닌 코드 하나씩을 준비해 봤어요.

     

     

    # 멀쩡한_코드.py
    import math
    
    res = math.sin(40)
    print(f'sin 40의 값은 {res} 입니다.')
    sin 40의 값은 0.7451131604793488 입니다.

     

     

    # 에러_코드.py
    import math
    
    res = math.sin(40
    print(f'sin 40의 값은 {es} 입니다.')
      Cell In[2], line 4
        res = math.sin(40
                      ^
    SyntaxError: '(' was never closed

     

     

    각각의 파일은 실행하면 위와 같이 결과 출력 또는 에러가 발생합니다. 그런데, 파이썬 인터프리터는 에러_코드.py 파일을 실행할 때 지정된 형식에 따라 에러 안내를 해 주고 있는데요, 이걸 입맛대로 변경하거나 PEP-8(Style Guide for Python Code, 파이썬 코딩을 할 때 추천하는 작성법)에 따른 권장사항을 알 수는 없다는 단점이 있습니다.

     

     

    그래서, PEP-8에 따른 권고사항을 알아보고 싶거나, 그때그때 IDE를 열어서 실행해보기 번거로운 상황에서는 flake8과 같은 정적 분석기를 이용하는 것이 좋습니다.

     

     

    flake8은 파이썬 IDE에서 실행할 수는 없으며, CLI를 켠 다음 flake8 파일이름.py 라고 실행을 해 줘야 합니다. 만약 체크할 파일이 여러개라면, 파일 대신 폴더를 지정해 주면 되고요.

     

     

     

     

    flake8을 이용해서 멀쩡한 파이썬 코드를 실행시켰을 때는 별도의 출력이나 리턴값이 표시되지 않습니다. 이 때문에, flake8을 실행시킨 뒤 별도 메시지가 없다면 괜찮은 코드구나 하고 넘어가도록 프로그램을 하나 만들어볼 수도 있겠네요. 그리고, 에러_코드.py 파일을 실행했을 때는 아래와 같이 메시지가 출력됩니다.

     

     

     

     

    이렇게 에러 메시지가 출력되기 때문에, py 파일의 정적 분석을 간편하게 할 수 있습니다. 이외에도, 들여쓰기를 할 때 띄어쓰기를 4개씩 했는지 등의 세세한 스타일 권고사항도 알려주기 때문에 flake8을 사용하다보면 파이썬 코딩 스타일이 PEP-8에 맞도록 점점 바뀌게 되는 효과를 얻을 수 있겠습니다.

     

     

    하지만, 이런 세세함이 오히려 보기 귀찮고 거슬리는 경우가 있을 수도 있지요. 그래서, flake8은 별도 옵션 조정을 할 수 있습니다. flake8 공식 문서를 참조해서 config 파일을 작성해 두시면, 내가 원하는 부분만 에러를 검사할 수 있도록 할 수 있습니다. 예를 들어, 코드와 함께 주석을 적을 때, 띄어쓰기 두개를 쓰도록 권장하는 경고인 E261을 무시하고 한 줄의 최대 글자를 150글자까지 허용하고 싶다면 options.flake8 파일을 아래와 같이 만들면 됩니다.

     

     

    [flake8]
    ignore =
        E261,
    
    max-line-length = 150

     

     

    다음으로는, flake8을 실행할 때 아래와 같이 명령어를 입력해 주면 됩니다.

     

     

    flake8 --config options.flake8 파이썬코드.py
    반응형

    댓글

문의: jwkang3929@naver.com