TypeError 해결: Python에서 문자열 형식 지정 중에 일부 인수가 변환되지 않음
Python의 문자열 형식화는 다양한 방법으로 수행할 수 있으며 모듈로(%
) 연산자가 그러한 방법 중 하나입니다. Python에서 가장 오래된 문자열 형식 지정 방법 중 하나이며 잘못된 방식으로 사용하면 TypeError: 문자열 형식 지정 중에 모든 인수가 변환되지 않음
이 발생할 수 있습니다.
그뿐만 아니라 다른 많은 이유가 같은 원인이 될 수 있습니다. 이 오류와 가능한 해결 방법에 대해 자세히 알아보십시오.
TypeError
는 지원되지 않는 객체 유형에 대해 작업을 시도할 때 발생하는 Python 예외입니다. 이 오류가 발생할 수 있는 많은 시나리오가 있지만 이 기사에서는 잘못된 문자열 형식으로 인해 발생하는 Python TypeError
를 살펴보겠습니다.
더 이상 고민하지 않고 시작하겠습니다!
Python에서 TypeError: String Formatting 중 일부 인수가 변환되지 않음
의 원인 및 해결 방법
Python에서 TypeError: not all arguments conversion during string format
이 발생할 수 있는 이유는 여러 가지가 있습니다. 가능한 솔루션과 함께 하나씩 논의해 보겠습니다.
Python의 잘못된 데이터 유형에 대한 작업
아래 주어진 예를 보십시오. 여기서는 사용자의 나이를 입력으로 받은 다음 모듈로 연산자(%
)를 사용합니다.
결과는 ans
변수에 저장되며 print
문에서 문자열 형식으로 지정됩니다. 하지만 이 코드를 실행하면 TypeError
가 발생합니다.
이것은 Python이 문자열 형식으로 입력을 받기 때문에 발생합니다. 이는 입력으로 사용되는 19
값이 Python에서 str
데이터 유형으로 간주됨을 의미합니다.
그러나 문자열에 모듈로 연산자(%
)를 사용할 수 있습니까? 아니요, 따라서 이 오류가 발생합니다.
age = input("Enter your age: ")
ans = age % 10
print("Your lucky number is:", ans)
출력:
Enter your age: 19
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: not all arguments converted during string formatting
이를 수정하려면 int()
함수를 사용하여 입력을 정수로 가져와야 합니다. 이것은 아래에서 수행됩니다.
age = int(input("Enter your age: "))
ans = age % 10
print("Your lucky number is:", ans)
출력:
Enter your age: 19
Your lucky number is: 9
이번에는 int()
함수가 입력을 정수 데이터 유형으로 변환하고 모듈로 연산자(%
)를 사용할 수 있으므로 원하는 출력을 얻는 것을 볼 수 있습니다.
Python에서 문자열 보간 연산자가 있는 형식 지정자의 부재
이 경우는 위에서 논의한 것과 약간 비슷합니다. 아래 주어진 예를 보십시오.
출력은 라인 2에서 오류가 발생했음을 보여줍니다. 하지만 그 이유를 추측할 수 있습니까?
답은 간단합니다. 우리는 파이썬에서 작은따옴표나 큰따옴표 안에 있는 모든 것이 문자열이라는 것을 알고 있습니다.
여기에서 값 19
는 큰따옴표로 묶여 있습니다. 즉, 문자열 데이터 유형이며 모듈로 연산자(%
)를 사용할 수 없습니다.
age = "19"
if age % 10:
print("Your age is a lucky number")
출력:
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: not all arguments converted during string formatting
이를 수정하기 위해 아래와 같이 int()
형식 지정자를 사용합니다.
age = "19"
if int(age) % 10:
print("Your age is a lucky number")
출력:
Your age is a lucky number
이번에는 코드가 잘 실행됩니다.
Python에서 형식 지정자와 값의 개수가 같지 않음
우리는 포맷할 값의 수만큼 문자열 포맷을 지정하는 동안 많은 포맷 지정자를 넣는다는 것을 알고 있습니다. 그러나 문자열 내에 지정된 형식 지정자 수보다 더 많거나 적은 값이 있으면 어떻게 될까요?
이 코드를 보세요. 여기에 세 개의 변수가 있고 그 중 두 개만 문자열에 삽입하려고 합니다.
그러나 print
문에서 인수를 전달할 때 세 가지 모두를 전달하므로 의심할 여지 없이 TypeError
가 발생합니다.
lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"
print("The males in the main role were: %s and %s." % (lead_actor, co_actor, actress))
출력:
Traceback (most recent call last):
File "<string>", line 5, in <module>
TypeError: not all arguments converted during string formatting
인수 목록에서 마지막 변수 actress
를 제거한 다음 이 프로그램을 다시 실행해 보겠습니다.
lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"
print("The males in the main role were: %s and %s." % (lead_actor, co_actor))
출력:
The males in the main role were: Harry Potter and Ron Weasley.
이번에는 문자열 내부의 형식 지정자의 수가 인수로 전달된 변수의 수와 같기 때문에 코드가 제대로 실행되는 것을 볼 수 있습니다.
사용할 형식 지정자는 값의 데이터 유형에 따라 다르며, 이 경우 문자열 데이터 유형을 처리하므로 %s
입니다.
Python에서 동일한 문자열에 다른 형식 지정자 사용
우리는 파이썬에서 문자열을 형식화할 수 있는 여러 가지 방법이 있다는 것을 알고 있지만 일단 방법을 선택하면 단일 문자열에서 해당 방법만 따라야 합니다. 즉, TypeError: not all arguments conversion during stringformatting
이 발생하기 때문에 단일 명령문에서 서로 다른 유형의 문자열 형식 지정 방법을 혼합할 수 없습니다.
이 개념을 더 잘 이해하려면 아래 코드를 살펴보십시오.
이 문자열의 형식을 지정하기 위해 문자열 내에서 placeholders({})
를 사용하고 있지만 이전처럼 인수를 튜플로 전달하지 않습니다. 대신, 변수 중 하나는 모듈로 연산자(%
) 앞에 오는 반면 다른 하나는 그렇지 않습니다.
이것이 TypeError
로 이어지는 것입니다.
lead_actor = "Harry Potter"
co_actor = "Ron Weasley"
actress = "Hermione Granger"
print("The males in the main role were: {0} and {1}." % lead_actor, co_actor)
출력:
Traceback (most recent call last):
File "<string>", line 5, in <module>
TypeError: not all arguments converted during string formatting
이 문제를 해결하기 위해 두 가지 작업을 수행할 수 있습니다.
-
문자열 내에서
placeholders({})
를 사용하려면 점(.
) 연산자와 함께format()
메서드를 사용하여 인수를 전달해야 합니다. 이것은 아래에서 수행됩니다.lead_actor = "Harry Potter" co_actor = "Ron Weasley" actress = "Hermione Granger" print("The males in the main role were: {0} and {1}.".format(lead_actor, co_actor))
출력:
The males in the main role were: Harry Potter and Ron Weasley.
이번에는 코드가 잘 실행되는 것을 볼 수 있습니다.
-
다른 방법은
placeholders({})
사용을 중단하고 그 자리에 형식 지정자를 사용하고 앞에 모듈로 연산자(%
)가 오는 튜플로 인수를 전달하는 것입니다. 이것은 다음과 같이 수행됩니다.lead_actor = "Harry Potter" co_actor = "Ron Weasley" actress = "Hermione Granger" print("The males in the main role were: %s and %s." % (lead_actor, co_actor))
출력:
The males in the main role were: Harry Potter and Ron Weasley.
형식 지정을 위한 모듈로 연산자(
%
)는 구식인 반면.format()
메서드와 함께 자리 표시자를 사용하는 것은 Python에서 문자열 형식을 지정하는 새로운 스타일 방법입니다.
이번 글은 여기까지입니다. Python의 문자열 형식화에 대해 자세히 알아보려면 이 문서를 참조하세요.
결론
이 기사에서는 Python에서 TypeError: Not all arguments conversion during string format
이 발생하는 다양한 이유와 가능한 수정 사항에 대해 이야기했습니다.
관련 문장 - Python Error
- AttributeError 수정: Python에서 'generator' 객체에 'next' 속성이 없습니다.
- AttributeError 해결: 'list' 객체 속성 'append'는 읽기 전용입니다.
- AttributeError 해결: Python에서 'Nonetype' 객체에 'Group' 속성이 없습니다.
- AttributeError: 'Dict' 객체에 Python의 'Append' 속성이 없습니다.
- AttributeError: 'NoneType' 객체에 Python의 'Text' 속성이 없습니다.
- AttributeError: Int 객체에 속성이 없습니다.