source

튜플 형식을 지정하려고 하면 "TypeError: 문자열 형식 지정 중에 변환된 모든 인수가 아님"이 표시되는 이유는 무엇입니까?

nicesource 2023. 7. 18. 21:48
반응형

튜플 형식을 지정하려고 하면 "TypeError: 문자열 형식 지정 중에 변환된 모든 인수가 아님"이 표시되는 이유는 무엇입니까?

사용하고 싶습니다.%-tuple을 인쇄하는 style 문자열 형식:

tup = (1,2,3)
print("this is a tuple: %s." % (tup))

다음과 같이 인쇄될 것으로 예상합니다.This is a tuple: (1,2,3).하지만 대신에 나는 다음과 같은 오류를 받습니다.TypeError: not all arguments converted during string formatting.

무엇이 문제이며 어떻게 해결해야 합니까?


명확성과 현대화를 위해 이 질문을 편집할 때, 저는 원래 예시의 한 가지 흥미로운 측면을 보존했습니다: 주변의 괄호입니다.tup이것들은 필요하지 않습니다.%구문 및 튜플을 만들지 않습니다.OP는 튜플 래핑(여기 답변에서 설명함)이 필요하다는 것을 이해했지만 단순히 잘못 이해했을 가능성이 있습니다.이 문제에 대한 자세한 내용은 요소가 하나만 있는 "싱글톤" 튜플을 만드는 방법을 참조하십시오.

>>> thetuple = (1, 2, 3)
>>> print("this is a tuple: %s" % (thetuple,))
this is a tuple: (1, 2, 3)

관심 튜플을 유일한 항목으로 하는 싱글톤 튜플 만들기, 즉(thetuple,)파트, 여기서 핵심 비트입니다.

%구문이 사용되지 않습니다.사용하다str.format더 단순하고 읽기 쉬운 방법:

t = 1,2,3
print('this is a tuple: {0}.'.format(t))

올바른 방법은 다음과 같습니다.

>>> thetuple = (1, 2, 3)
>>> print("this is a tuple: %s" % (thetuple,))
this is a tuple: (1, 2, 3)

%문자열 연산자는 여전히 Python 3.x에서 지원되며 튜플(또는 목록)을 별도의 값으로 쉽게 포맷할 수 있습니다.사용..format이 경우 추가 작업이 필요합니다. 값을 별도의 인수로 전달하거나 시퀀스를 인덱싱해야 합니다.

>>> tup = (1,2,3)
>>> print("First: %d, Second: %d, Third: %d" % tup)
First: 1, Second: 2, Third: 3
>>> print('First: {}, Second: {}, Third: {}'.format(1,2,3))
First: 1, Second: 2, Third: 3
>>> print('First: {0[0]}, Second: {0[1]}, Third: {0[2]}'.format(tup))
First: 1, Second: 2, Third: 3

%연산자는 또한 다른 형식 코드를 사용하여 인수의 유형을 검증하는 데 유용합니다.%s,%d,%i), .format은 두 개의 변환 플래그만 지원합니다.'!s'그리고.'!r'.

>>> tup = (1, 2, 3)
>>> print "Here it is: %s" % (tup,)
Here it is: (1, 2, 3)
>>>

여기서,(tup,)에 쉼표가 있는 경우 - 튜플을 포함하는 튜플입니다.외부 튜플은 % 연산자에 대한 인수입니다.내부 튜플은 실제로 인쇄되는 내용물입니다.뒤에 오는 쉼표가 없으면,(tup)와 동일합니다.tup괄호는 일반 그룹화 괄호일 뿐입니다.

비록 이 질문이 꽤 오래되고 많은 다른 답을 가지고 있지만, 저는 여전히 가장 "파이토닉적"이고 읽기 쉽고 간결한 답을 추가하고 싶습니다.

일반적인 튜플 인쇄 방법은 Antimony에 의해 이미 올바르게 표시되었기 때문에 Fong Kah Chun이 올바르게 표시한 것처럼 튜플의 각 요소를 개별적으로 인쇄하기 위한 추가 사항입니다.%s통사론

흥미롭게도 댓글에서만 언급되었지만 별표 연산자를 사용하여 태플의 압축을 풀면 완전한 유연성과 가독성을 얻을 수 있습니다.str.format튜플 요소를 개별적으로 인쇄할 때의 방법.

tup = (1, 2, 3)
print('Element(s) of the tuple: One {0}, two {1}, three {2}'.format(*tup))

이것은 또한 단일 요소 튜플을 인쇄할 때 후행 콤마를 인쇄하는 것을 방지합니다. Jacob CUI가 다음을 사용하여 우회합니다.replace(인쇄할 때 형식 표현을 유지하려면 후행 쉼표 표현이 올바르더라도):

tup = (1, )
print('Element(s) of the tuple: One {0}'.format(*tup))

다른 답변에서 제안된 방법 외에도 Python 3.6 이후에는 리터럴 문자열 보간(f-string)도 사용할 수 있습니다.

>>> tup = (1,2,3)
>>> print(f'this is a tuple: {tup}.')
this is a tuple: (1, 2, 3).
t = (1, 2, 3)

# the comma (,) concatenates the strings and adds a space
print "this is a tuple", (t)

# format is the most flexible way to do string formatting
print "this is a tuple {0}".format(t)

# classic string formatting
# I use it only when working with older Python versions
print "this is a tuple %s" % repr(t)
print "this is a tuple %s" % str(t)

이것은 문자열 형식을 사용하지 않지만 다음 작업을 수행할 수 있어야 합니다.

print('this is a tuple ', (1, 2, 3))

문자열 형식을 사용하려면 다음을 수행합니다.

print('this is a tuple %s' % str((1, 2, 3)))
# or
print('this is a tuple %s' % ((1, 2, 3),))

먼저 튜플을 문자열로 명시적으로 변환해 보십시오.

t = (1,2,3)

print("This is a tuple: %s" % str(t))

은 Python 사을지다니 합니다.%문자열에서 연산자를 사용하여 문자열에서 printf-style 형식 지정을 수행합니다.여기서, 우리가 사용하기 때문에.%s 표시자,가 있습니다.str(t) 입니다. 값입니다.

에는 인가 하튜다음사경문포우맷자된로열여용하수을나있플만는이.format뒤에 쉼표가 표시됩니다.

>>> t = (1,)
>>> print('this is a tuple: {}.'.format(t))
this is a tuple: (1,).

이는 해당 튜플을 선언하는 데 필요한 구문과 일치합니다.

이것도 사용할 수 있습니다.

tup = (1,2,3)
print("this is a tuple {something}".format(something=tup))

사용할 수 없습니다.%s와 함께(tup)단지 튜플로 포장과 포장 풀기 개념 때문입니다.

대화는 저렴합니다. 코드를 보여주십시오.

>>> tup = (10, 20, 30)
>>> i = 50
>>> print '%d      %s'%(i,tup)
50  (10, 20, 30)
>>> print '%s'%(tup,)
(10, 20, 30)
>>> 

언급URL : https://stackoverflow.com/questions/1455602/why-do-i-get-typeerror-not-all-arguments-converted-during-string-formatting-t

반응형