programing

TypeError: 문자열 형식 지정 중 일부 인수가 변환되지 않았습니다.

nicescript 2022. 9. 30. 13:24
반응형

TypeError: 문자열 형식 지정 중 일부 인수가 변환되지 않았습니다.

이 프로그램은 두 개의 이름을 사용하기로 되어 있으며, 길이가 같으면 같은 단어인지 확인해야 합니다.같은 단어일 경우 "The names is the same"이라고 표시됩니다.길이가 같지만 문자가 다른 경우 "The names different but same length"라고 표시됩니다.문제가 있는 부분은 아래 4줄에 있습니다.

#!/usr/bin/env python
# Enter your code for "What's In (The Length Of) A Name?" here.
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
    if name1 == name2:
        print ("The names are the same")
    else:
        print ("The names are different, but are the same length")
    if len(name1) > len(name2):
        print ("'{0}' is longer than '{1}'"% name1, name2)
    elif len(name1) < len(name2):
        print ("'{0}'is longer than '{1}'"% name2, name1)

이 코드를 실행하면 다음과 같이 표시됩니다.

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

다른 형식 함수를 혼합하고 있습니다.

★★★%에서는 「」을 사용합니다.%다음 중 하나:

'It will cost $%d dollars.' % 95

의 ★★★★★★★★★★★★★★★★★★★★★★★.{}에서는 「」을 사용합니다.{}와 " " ".format

'It will cost ${0} dollars.'.format(95)

오래된 형식의 포맷에서는 태플을 사용하여 여러 인수를 지정해야 합니다.

'%d days and %d nights' % (40, 40)

같은 경우에는 '아예'를{} " " " 사용, ".format:

"'{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)

이 에러는 스트링 포맷 메서드에 태플을 전달하려고 할 때 발생했습니다.

이 질문/답변에서 해결책을 찾았습니다.

링크에서 정답 복사 및 붙여넣기(MY WORK 아님):

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

관심있는 태플을 유일한 아이템으로 싱글톤 태플을 만드는 것, 즉 (태플) 부분이 핵심입니다.

다른 두 가지 답변과 더불어 마지막 두 가지 조건에서도 들여쓰기가 잘못된 것 같습니다.조건은 하나의 이름이 다른 이름보다 길어야 하며 들여쓰기 없이 'elif'로 시작해야 한다는 것입니다.첫 번째 조건(여백에서 4개의 들여쓰기)에 넣으면 이름의 길이가 같을 수 없고 동시에 다를 수 없기 때문에 모순이 발생합니다.

    else:
        print ("The names are different, but are the same length")
elif len(name1) > len(name2):
    print ("{0} is longer than {1}".format(name1, name2))

이 오류는 변수 참조를 잊어버린 경우에도 발생할 수 있습니다.

"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는 잘 작동합니다.

mysqlclient python lib를 사용합니다.lib는 tuple args를 받아들이지 않을 것 같습니다.다음과 같은 목록을 전달하려면['arg1', 'arg2']효과가 있습니다.

언급URL : https://stackoverflow.com/questions/18053500/typeerror-not-all-arguments-converted-during-string-formatting-python

반응형