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

Shikha Chaudhary 2023년6월21일
  1. Python에서 TypeError: String Formatting 중 일부 인수가 변환되지 않음의 원인 및 해결 방법
  2. 결론
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

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

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

관련 문장 - Python Error

관련 문장 - Python TypeError