Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python TypeError: 형식 문자열에 대한 인수가 충분하지 않습니다(not enough arguments for format string) 해결 방법

파이썬에서 문자열을 포맷팅할 때는 올바른 개수의 인수를 전달해야 합니다. 문자열에 삽입하려는 값의 개수보다 지정한 인수의 개수가 적으면 "TypeError: not enough arguments for format string" 오류가 발생합니다.

이 글에서는 이 오류가 무엇을 의미하고 왜 발생하는지 설명하고, 실제 예제를 통해 코드에서 이 오류를 해결하는 방법까지 단계별로 살펴보겠습니다.

TypeError: not enough arguments for format string 오류란?

이 오류는 TypeError 유형입니다. TypeError는 어떤 값에 대해 그 데이터 타입이 지원하지 않는 연산을 수행하려고 할 때 발생합니다.

이 경우에는 문자열 포맷팅 작업에서 문제가 생긴 것입니다. 파이썬은 문자열을 포맷하는 과정에서 실수가 있었다고 알려주는 것입니다.

문자열을 포맷할 때는 지정하는 인수의 개수가 포맷하려는 값의 개수와 반드시 일치해야 합니다. 그렇지 않으면 오류가 발생합니다.

오류 발생 예제

이 오류가 자주 발생하는 상황 중 하나는 % 문자열 포맷팅에서 인수를 괄호로 묶는 것을 잊었을 때입니다. 이 문법은 % 연산자를 사용해 문자열에 값을 삽입합니다.

여기서 명예의 전당(honor roll)에 오른 학생 명단을 문자열로 포맷하는 프로그램을 만들어 보겠습니다. 먼저 학생 이름 목록을 정의합니다:

students = ["Andy", "Malcolm", "Lindsay", "Lucy"]

다음으로 % 문법을 사용해 이 값들을 문자열로 포맷합니다:

honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % students[0], students[1], students[2], students[3]
print(honor_roll)

"students" 배열의 네 이름을 모두 "honor_roll" 문자열로 포맷했습니다. 문자열 안의 %s는 값이 들어갈 위치를 나타내며, 문자열 뒤의 %는 문자열에 추가할 값을 지정합니다.

코드를 실행하면 어떻게 될까요:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
	honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % students[0], students[1], students[2], students[3]
TypeError: not enough arguments for format string

파이썬에서 오류가 발생했습니다. 해결 방법을 하나씩 알아보겠습니다.

해결 방법 1: 문자열 포맷팅 문법 수정하기

문자열 포맷팅 과정에서 실수를 했습니다. % 연산자를 사용할 때는 문자열에 삽입하려는 값들을 반드시 괄호()로 묶어야 합니다.

위 예제에서는 문자열에 넣을 값을 쉼표로 구분된 목록 형태로 지정했지만, 이 목록이 괄호로 묶여 있지 않습니다. 그 결과 파이썬은 첫 번째 값만 포맷에 전달되었다고 판단해 오류를 발생시킵니다.

% 기호 뒤의 값들을 괄호로 묶어 오류를 수정합니다:

honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % (students[0], students[1], students[2], students[3])

코드를 다시 실행해 보겠습니다:

Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.

코드가 성공적으로 실행되어 명예의 전당에 오른 학생들을 알려주는 메시지가 출력됩니다.

해결 방법 2: .format() 메서드 사용하기

% 문법은 점점 구식이 되어가고 있습니다. 최신 파이썬 코드에서는 .format() 메서드와 같은 다른 문자열 포맷팅 방식이 더 선호됩니다.

% 문법 대신 .format() 문법을 사용해 문제를 해결할 수 있습니다:

honor_roll = "{}, {}, {}, and {} are on the CK High School Honor Roll.".format(students[0], students[1], students[2], students[3])

이 문법의 구조는 % 방식과 비슷합니다. 문자열 안에서 {} 중괄호로 값이 들어갈 위치를 표시합니다.

.format() 메서드로 문자열에 추가할 값들의 목록을 지정합니다. 코드를 실행해 보겠습니다:

Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.

프로그램이 성공적으로 명예의 전당에 오른 학생들의 이름 목록을 문자열 형태로 출력합니다.

참고로 파이썬 3.6 이상에서는 f-string(예: f"{students[0]}")을 사용하는 것이 더 간결하고 가독성이 좋아 현대적인 파이썬 코드에서 가장 널리 쓰이는 방법입니다. 새 프로젝트라면 f-string 사용을 고려해 보세요.

마무리

"TypeError: not enough arguments for format string" 오류는 문자열 포맷 연산에서 지정한 인수의 개수가 문자열에 삽입하려는 값의 개수와 일치하지 않을 때 발생합니다.

이 문제를 해결하려면 먼저 % 연산자를 사용하는 경우 모든 인수를 괄호()로 묶었는지 확인하세요. 또한 .format() 메서드나 f-string을 사용하면 이 오류를 해결하는 동시에 코드를 더 현대적으로 개선할 수 있습니다.

이제 여러분도 이 흔한 파이썬 오류를 전문가처럼 해결할 준비가 되었습니다!