%를 사용하여 {0}과(와) 같은 자리 표시자를 대체하려고 하면 "TypeError: 문자열 형식 지정 중 일부 인수가 변환되지 않음"이 표시되는 이유는 무엇입니까?
사용자로부터 2개의 문자열을 읽을 수 있는 코드가 있습니다.
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
나중에 인쇄하기 위해 이 문자열들을 더 긴 문자열로 포맷하고 싶습니다.
if len(name1) > len(name2):
print ("'{0}' is longer than '{1}'"% name1, name2)
그러나 다음과 같은 오류 메시지가 나타납니다.
Traceback (most recent call last):
File "program.py", line 13, in <module>
print ("'{0}' is longer than '{1}'"% name1, name2)
TypeError: not all arguments converted during string formatting
코드에 무슨 문제가 있나요?문자열 형식을 올바르게 지정하려면 이 행을 어떻게 써야 합니까?
이러한 종류의 문자열 형식을 수행하는 가장 일반적인 방법을 자세히 비교하려면 문자열 형식: % vs . format vs . f-string 리터럴을 참조하십시오.또한 변수 값을 문자열 안에 넣는 방법(문자열에 삽입하는 방법)을 참조하십시오.이런 종류의 현악기 구성에 대한 일반적인 사용법 가이드입니다.이 에러의 또 다른 일반적인 원인에 대해서는, Python 의 문자열 포맷을 사용한 태플 인쇄를 참조해 주세요.
구식%포맷 사용%포맷용 코드:
# A single value can be written as is:
'It will cost $%d dollars.' % 95
# Multiple values must be provided as a tuple:
"'%s' is longer than '%s'" % (name1, name2)
새로운 스타일의{}포맷 사용{}코드와.format방법."template" 문자열에 혼재하지 마십시오.{}플레이스 홀더, 콜.format, 사용하지 마십시오.%.
# The values to format are now arguments for a method call,
# so the syntax is the same either way:
'It will cost ${0} dollars.'.format(95)
"'{0}' is longer than '{1}'".format(name1, name2)
'%' 연산자를 사용하여 기존 문자열 형식을 사용하는 올바른 방법은 printf-style 형식 문자열을 사용하는 것입니다(이것에 대한 Python 설명서: http://docs.python.org/2/library/string.html#format-string-syntax):
"'%s' is longer than '%s'" % (name1, name2)
그러나 '%' 연산자는 앞으로 더 이상 사용되지 않을 수 있습니다.새로운 PEP 3101의 작업 방식은 다음과 같습니다.
"'{0}' is longer than '{1}'".format(name1, name2)
이 오류는 값이 태플일 경우 를 사용하여 단일 값의 형식을 문자열로 지정하려고 할 때도 발생합니다.
Alex Martelli의 답변에서 보여지고 설명되었듯이:
>>> thetuple = (1, 2, 3)
>>> print("this is a tuple: %s" % (thetuple,))
this is a tuple: (1, 2, 3)
관심있는 태플을 유일한 아이템으로 싱글톤 태플 만들기.
(thetuple,)여기서 중요한 부분이 있습니다.
이 오류는 변수 참조를 잊어버린 경우에도 발생할 수 있습니다.
"this is a comment" % comment #ERROR
대신
"this is a comment: %s" % comment
python 3.7 이상에서는 새롭고 쉬운 방법이 있습니다.이것은 f-string이라고 불립니다.구문은 다음과 같습니다.
name = "Eric"
age = 74
f"Hello, {name}. You are {age}."
출력:
Hello, Eric. You are 74.
한 번의 인쇄 호출에 많은 값을 저장하기 때문에 데이터를 태플로 저장하는 별도의 변수를 생성하여 인쇄 함수를 호출하는 것이 해결책이었습니다.
x = (f"{id}", f"{name}", f"{age}")
print(x)
가장 쉬운 방법 형식 문자열 번호를 정수로 변환
number=89
number=int(89)
에러도 발생하고 있습니다.
_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting
하지만 목록 args는 잘 작동합니다.
libmysqlclient python lib를 합니다.lib tuple args를 않을 . ['arg1', 'arg2']과가있있 있있있다다
언급URL : https://stackoverflow.com/questions/18053500/why-do-i-get-typeerror-not-all-arguments-converted-during-string-formatting-t
'programing' 카테고리의 다른 글
| 프로젝트에서 모든 .pyc 파일을 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
|---|---|
| 루프 내의 각 출력 라인은 어떻게 처리합니까? (0) | 2023.04.19 |
| Eclipse용 Bash 스크립트 플러그인? (0) | 2023.04.19 |
| PowerShell에서 특정 변수가 글로벌 범위에 존재하는지 여부를 테스트하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
| 행의 첫 번째 N자를 삭제하기 위한 unix 명령어는 무엇입니까? (0) | 2023.04.19 |