Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python typeerror:문자열 형식화 중에 모든 인수가 변환되지 않음

Python은 규칙에 충실합니다. Python 언어의 주요 기능 중 하나는 프로그램이 의도한 방식으로 작동하도록 사용자를 계속 확인합니다. 문자열로 작업할 때 "문자열 서식을 지정하는 동안 모든 인수가 변환되지 않았습니다"라는 오류가 발생할 수 있습니다.

이 가이드에서는 이 오류와 그 오류가 나타나는 이유에 대해 설명합니다. 코드에서 문제를 해결하는 데 도움이 되도록 이 오류가 발생하는 두 가지 일반적인 시나리오를 살펴봅니다.

더 이상 고민하지 않고 시작하겠습니다!

문제:typeerror:문자열 형식화 중 일부 인수가 변환되지 않음

TypeError는 특정 유형의 값에 대해 실행할 수 없는 작업을 수행하고 있음을 알려주는 오류 유형입니다. 이 경우 유형 오류는 문자열 값과 관련됩니다.

Python은 문자열 형식을 지정할 수 있는 여러 가지 방법을 제공합니다. 이를 통해 문자열에 값을 삽입하거나 문자열 끝에 값을 연결할 수 있습니다.

문자열 형식을 지정하는 가장 일반적인 두 가지 방법은 다음과 같습니다.

  • % 연산자 사용(구식)
  • .format() 함수와 함께 {} 연산자 사용

이 두 구문을 함께 사용하려고 하면 오류가 발생합니다.

예:혼합 문자열 서식 규칙

빵집에서 판매되는 제품의 5% 가격 인상을 계산하는 프로그램을 작성해 봅시다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

우리는 사용자로부터 제품 이름과 제품 가격이라는 두 가지 정보를 수집하는 것으로 시작합니다. input() 문을 사용하여 이 작업을 수행합니다.

name = input("Enter the name of the product: ")
price = input("Enter the price of the product: ")

다음으로 "가격"의 값에 1.05를 곱하여 제품의 새 가격을 계산합니다. 이는 5% 가격 인상을 나타냅니다.

increase = round(float(price) * 1.05, 2)

round() 문을 사용하여 "증가" 값을 소수점 이하 두 자리로 반올림합니다. 마지막으로 문자열 형식을 사용하여 제품의 새 가격을 콘솔에 인쇄합니다.

print("The new price of {} is ${}. " % name, str(increase))

이 코드는 "name" 및 "increase" 값을 문자열에 추가합니다. "증가"를 문자열로 변환하여 문자열로 병합합니다. 값을 변환하기 전에 "증가"는 부동 소수점 숫자입니다. 코드를 실행하고 어떤 일이 일어나는지 확인하세요:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
	print("The new price of {} is {}" % name, str(discount))
TypeError: not all arguments converted during string formatting

코드의 마지막 줄에 오류가 있는 것 같습니다.

문제는 문자열 형식 지정 구문을 혼동했다는 것입니다. 우리는 {} 및 % 연산자를 사용했습니다. 이들은 두 가지 다른 유형의 문자열 형식화에 사용됩니다.

이 문제를 해결하기 위해 프로그래밍의 마지막 줄을 다음 두 줄의 코드 중 하나로 바꿉니다.

print("The new price of {} is ${}.".format(name, str(increase)))

print("The new price of %s is $%s." % (name, str(increase)))

코드의 첫 번째 줄은 .format()을 사용합니다. 통사론. 이것은 {}의 값을 .format()의 값으로 대체합니다. 지정된 순서대로 명령문.

코드의 두 번째 줄은 이전 스타일의 % 문자열 형식화 기술을 사용합니다. "%s" 값은 % 연산자 뒤에 괄호로 묶인 값으로 대체됩니다.

코드를 다시 실행하고 어떤 일이 일어나는지 봅시다:

Enter the name of the product: Babka
Enter the price of the product: 2.50
The new price of Babka is $2.62.

코드가 문자열에 인수를 성공적으로 추가했습니다.

예:모듈로 연산자를 혼동하기

Python은 백분율 기호(%)를 사용하여 모듈로 숫자와 문자열 형식을 계산합니다. 모듈로 숫자는 나눗셈 후 남은 나머지입니다.

문자열에 백분율 기호를 사용하는 경우 서식 지정에 사용됩니다. 숫자에 백분율 기호를 사용하는 경우 모듈로를 계산하는 데 사용됩니다. 따라서 모듈로 계산을 수행하려는 문자열로 값의 형식이 지정되면 오류가 발생합니다.

숫자가 홀수인지 짝수인지 계산하는 프로그램을 살펴보세요.

number = input("Please enter a number: ")
mod_calc = number % 2

if mod_calc == 0:
	print("This number is even.")
else:
	print("This number is odd.")

먼저 사용자에게 숫자를 입력하도록 요청합니다. 그런 다음 모듈로 연산자를 사용하여 "숫자"를 2로 나눌 때 반환되는 나머지를 계산합니다.

모듈로 연산자의 반환 값이 0이면 if 명령문 실행. 그렇지 않으면 else의 내용 문이 실행됩니다.

코드를 실행해 보겠습니다.

Please enter a number: 7
Traceback (most recent call last):
  File "main.py", line 2, in <module>
	mod_calc = number % 2
TypeError: not all arguments converted during string formatting

또 다른 TypeError. 이 오류는 "숫자"가 문자열이기 때문에 발생합니다. input() 메서드는 문자열을 반환합니다. 모듈로 계산을 수행하려면 "숫자"를 부동 소수점이나 정수로 변환해야 합니다.

float() 함수를 사용하여 "숫자"를 float로 변환할 수 있습니다.

mod_calc = float(number) % 2

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

Please enter a number: 7
This number is odd.

우리의 코드가 작동합니다!

결론

Python이 문자열 형식 작업에 모든 인수를 추가하지 않으면 "문자열 형식 지정 중 변환된 모든 인수가 아님" 오류가 발생합니다. 이것은 문자열 형식화 구문을 혼동하거나 문자열에 대해 모듈로 연산을 수행하려고 하는 경우에 발생합니다.

이제 전문 소프트웨어 엔지니어처럼 이 일반적인 Python 오류를 해결할 준비가 되었습니다!