HOWTO · Python

TypeError 해결: Python에서 문자열 형식 지정 중에 일부 인수가 변환되지 않음

이 기사에서는 TypeError가 발생하는 다양한 이유에 대해 설명합니다. Python에서 문자열 형식 지정 중에 모든 인수가 변환되지는 않습니다. 우리는 이전 스타일과 새로운 스타일의 문자열 서식 지정 방법에 대해 배우고 이를 혼합하여 TypeError를 발생시키는 방법을 배웁니다. 또한 잘못된 데이터 유형과 형식 지정자가 없는 경우 이 오류가 발생하는 방식도 살펴봅니다.

이 페이지의 내용

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

이 문제를 해결하기 위해 두 가지 작업을 수행할 수 있습니다.

  1. 문자열 내에서 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.
    

    이번에는 코드가 잘 실행되는 것을 볼 수 있습니다.

  2. 다른 방법은 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이 발생하는 다양한 이유와 가능한 수정 사항에 대해 이야기했습니다.