Python에서 여러 줄에 긴 텍스트 문자열 쓰기

사업

Python에서 flake8과 같은 PEP8 호환 코드 검사기를 사용하는 경우 줄이 80자를 초과하면 다음 오류가 발생합니다.
E501 line too long

URL과 같이 80자 이상의 긴 문자열을 여러 줄의 코드로 나누는 방법을 보여 드리겠습니다.

  • 백슬래시(\)가 있는 줄 바꿈 무시
  • 줄 바꿈은 괄호로 자유롭게 묶을 수 있습니다.

또한, textwrap 모듈은 긴 문자열을 줄바꿈 또는 축약하여 출력하고 표시하려는 경우에 유용합니다.

한 줄의 문자 수가 긴 문자열보다 메서드 체인에서 더 길면 코드에서도 줄이 끊어질 수 있습니다.

백슬래시(\)가 있는 줄 바꿈 무시

Python에서 백슬래시(\)는 연속 문자이며 줄 끝에 배치되면 후속 줄 바꿈을 무시하고 줄이 계속된다고 가정합니다.

n = 1 + 2 \
    + 3

print(n)
# 6

또한, 여러 개의 문자열 리터럴을 연속적으로 작성하는 경우 아래와 같이 연결되어 하나의 문자열을 형성합니다.

s = 'aaa' 'bbb'

print(s)
# aaabbb

이 둘을 결합하면 아래와 같이 긴 문자열을 여러 줄의 코드로 작성할 수 있습니다.

s = 'https://wikipedia.org/wiki/'\
    '%E3%83%97%E3%83%AD%E3%82%B0%E3%83'\
    '%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E'

print(s)
# https://wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E

문자열 리터럴(‘ 또는 “”로 묶음)만 연결할 수 있으며 문자열을 포함하는 변수는 오류를 발생시킵니다.

s_var = 'xxx'

# s = 'aaa' s_var 'bbb'
# SyntaxError: invalid syntax

변수를 서로 연결하거나 변수를 문자열 리터럴에 연결하려면 + 연산자를 사용합니다.

s = 'aaa' + s_var + 'bbb'

print(s)
# aaaxxxbbb

백슬래시(\)로 구분하더라도 변수를 연결하려면 + 연산자가 필요합니다.

s = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\
    + s_var\
    + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'

print(s)
# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

줄 바꿈은 괄호로 자유롭게 묶을 수 있습니다.

Python에서는 다음 괄호 안의 줄을 자유롭게 깰 수 있습니다. 이 규칙을 사용하여 긴 텍스트 문자열을 괄호로 묶을 수 있습니다.

  • ()
  • {}
  • []

다음 괄호에는 의미가 있습니다.

  • {} = set
  • [] = list

이러한 이유로 긴 문자열을 여러 줄에 작성할 때는 대괄호()를 사용합니다.

다시 말하지만, 여러 문자열을 함께 연결하여 단일 문자열을 형성할 수 있다는 사실을 사용하여 다음을 작성할 수 있습니다.

s = ('https://wikipedia.org/wiki/'
     '%E3%83%97%E3%83%AD%E3%82%B0%E3%83'
     '%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E')

print(s)
# https://wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E

백슬래시가 있는 예와 같이 변수가 포함될 때 + 연산자가 필요합니다.

s = ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
     + s_var
     + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')

print(s)
# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb