Python 문자열은 올바른 수의 인수를 사용하여 형식을 지정해야 합니다. 지정하는 인수의 수가 문자열로 형식화하려는 값의 수보다 적으면 "TypeError:형식 문자열에 대한 인수가 충분하지 않음"과 같은 오류가 발생합니다.
이 가이드에서는 이 오류의 의미와 발생 이유에 대해 설명합니다. 코드에서 이 오류를 해결하는 방법을 이해하는 데 도움이 되는 예제를 살펴보겠습니다.
TypeError:형식 문자열에 대한 인수가 충분하지 않습니다.
우리의 오류는 TypeError입니다. 이는 기본 데이터 유형이 해당 작업을 지원하지 않는 값에 대해 무언가를 시도했음을 의미합니다.
이 경우 문자열 형식으로 작업합니다. 파이썬은 우리가 문자열 형식을 잘못 지정했다고 알려줍니다.
문자열 형식을 지정할 때 지정하는 인수의 수는 형식을 지정할 값의 수와 같아야 합니다. 그렇지 않으면 오류가 발생합니다.
예시 시나리오
이 오류가 발생하는 일반적인 상황은 % 문자열 형식의 인수를 괄호로 묶는 것을 잊었을 때입니다. 이 구문은 % 연산자를 사용하여 문자열에 값을 추가합니다.
여기에서 우리는 우등 명단에 있는 학생 이름 목록을 문자열로 형식화하는 앱을 빌드합니다. 먼저 학생 이름 목록을 정의합니다.
students = ["Andy", "Malcolm", "Lindsay", "Lucy"]
다음으로 % 구문을 사용하여 이러한 값을 문자열로 형식화합니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
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() 사용
% 구문이 구식이 되기 시작했습니다. 현대 Python 코드에서 더 선호되는 .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.
우리 프로그램은 우등 명단에 오른 학생의 이름 목록을 성공적으로 보여줍니다. 이 목록은 문자열의 일부로 형식이 지정됩니다.
결론
"TypeError:형식 문자열에 대한 인수가 충분하지 않음" 오류는 문자열 형식 작업에 지정된 인수의 수가 문자열에 추가하려는 값의 수와 같지 않으면 발생합니다.
이 문제를 해결하려면 % 연산자를 사용하는 경우 먼저 모든 인수를 중괄호()로 묶어야 합니다. .format()
을 사용할 수 있습니다. 이 오류를 수정하고 코드를 현대화하려면 % 구문을 대체하는 방법을 사용하십시오.
이제 전문가처럼 이 일반적인 Python 오류를 수정할 준비가 되었습니다!