Python TypeError : 형식 문자열에 대한 인수가 충분하지 않습니다.


138

출력은 다음과 같습니다. 이것들은 내가 믿는 utf-8 문자열입니다 ...이 중 일부는 NoneType 일 수 있지만 그 전에는 실패합니다 ...

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname, procversion, int(percent), exe, description, company, procurl

TypeError : 형식 문자열에 대한 인수가 충분하지 않습니다.

그래도 7은 7입니까?

답변:


177

%문자열 형식을 지정 하는 구문이 오래되었습니다. 파이썬 버전에서 지원한다면, 다음과 같이 작성해야합니다 :

instr = "'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}'".format(softname, procversion, int(percent), exe, description, company, procurl)

또한 발생한 오류를 수정합니다.


로깅 모듈에서도 작동합니까? 이런 종류의 보간이 그것을 이해합니까?
AllTradesJack

: @joshsvoss : 예, 몇 가지 링크가 가능성을 논의하는 것이 여기에 언급있다 bugs.python.org/issue14031
시므온 프랜트

4
@ SimeonVisser, 왜 이것이 구식이됩니까? 예를 들어, 하나의 변수를 사용하여 형식 문자열을 저장하고 같은 변수에 대체 된 값을 가진 문자열을 넣으려는 경우 format_string % = ( 'bla', 'bla', 'bla')을 사용 하여 조금 더 깔끔한 코드를 얻습니다. . 이와 관련하여 정교하거나 유용한 링크를 찾으시겠습니까?
Djuka

.format ()은 매우 일반적이기 때문에 추가되었으므로 운영자가 할 필요가 없습니다. 귀하의 예는 훌륭하지만 초보자에게 설명하기가 어렵습니다. a = a.format (1,2,3) 표기법은 훨씬 더 명확하고 이해하기 쉽고 가르치기 쉽습니다. 링크가 없지만 이것이 format ()이 도입 된 주요 이유입니다 (이해 용이성).
Simeon Visser 2018 년

1
또한 format ()은 "{a} {b}". format (a = '3', b = '4')와 같이보다 명확하게 발생하는 표현 방법을 지원합니다.
Simeon Visser 2018 년

240

형식 인수를 튜플에 넣어야합니다 (괄호 추가).

instr = "'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % (softname, procversion, int(percent), exe, description, company, procurl)

현재 가지고있는 것은 다음과 같습니다.

intstr = ("'%s', '%s', '%d', '%s', '%s', '%s', '%s'" % softname), procversion, int(percent), exe, description, company, procurl

예:

>>> "%s %s" % 'hello', 'world'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>> "%s %s" % ('hello', 'world')
'hello world'

3
그것은 효과가 있었다. NoneType 오류를 피하기 위해 % s 형식을 사용하려고했지만 여전히 오류가 발생합니다. 관련 : stackoverflow.com/questions/1338690/…
y2k

나이를 감안할 때 OP에 유용하지는 않지만 누군가에게 여전히 유용한 경우 : 변수가 없을 수있는 간단한 해결 방법은 3 진 명령문으로이를 방지하는 것입니다. 즉 "% s % s"% ( a가 none이 아닌 경우 "", b) None이 될 가능성이 우려되는 경우. 따라서 a가 None 인 경우에도 여전히 형식 연산자에 None을 전달하지 않아 문제가 발생합니다.
블레어

21

%형식 문자열에서 백분율 문자로 사용할 때 동일한 오류가 발생 했습니다. 이에 대한 해결책은를 두 배로 늘리는 것 %%입니다.


4
솔루션의 작동 방식 및 솔루션없이 실패하는 방법 등에 대한 코드 예제를 제공하는 것이 유용 할 수 있습니다. 좋은 답변을 작성하려면 어떻게합니까?를 참조하십시오 . . 이 질문은 5 년 전의 질문이므로 이미있는 것보다 훨씬 많은 정보를 제공하는 경우에만 답변을 추가해야합니다.
라몬

오타로 인해이 오류가 변형되었습니다."foo: %(foo)s, bar: s(bar)% baz: %(baz)s" % {"foo": "FOO", "bar": "BAR", "baz": "BAZ"}
Akavall

python3의 경우이 "솔루션"이 잘못되었습니다-> 잘못된 구문
JonyD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.