답변:
둘 이상의 인수를 사용하는 경우 튜플에 있어야합니다 (추가 괄호 참조).
'%s in %s' % (unicode(self.author), unicode(self.publication))
EOL이 지적했듯이이 unicode()
함수는 일반적으로 ASCII 인코딩을 기본값으로 가정하므로 ASCII가 아닌 문자가 있으면 인코딩을 명시 적으로 전달하는 것이 더 안전합니다.
'%s in %s' % (unicode(self.author,'utf-8'), unicode(self.publication('utf-8')))
Python 3.0부터는 str.format()
구문을 대신 사용하는 것이 좋습니다.
'{0} in {1}'.format(unicode(self.author,'utf-8'),unicode(self.publication,'utf-8'))
format
다음은 설명서에서 발췌 한 것입니다.
을 감안할 때
format % values
,%
변환 사양에서format
0 개 이상의 요소로 대체됩니다values
. 이 효과는sprintf()
C 언어에서의 사용과 유사합니다 .
format
단일 인수가 필요한 경우 값은 단일 비 튜플 객체 일 수 있습니다. 그렇지 않으면, 값은에 의해 지정된 항목을 정확히 번호 튜플해야format
문자열 , 또는 단일 매핑 객체 (예를 들어, 사전).
str.format
대신%
%
연산자 의 새로운 대안 은을 사용하는 것 str.format
입니다. 다음은 설명서에서 발췌 한 내용입니다.
str.format(*args, **kwargs)
문자열 형식화 작업을 수행하십시오. 이 메소드가 호출되는 문자열은 중괄호로 구분 된 리터럴 텍스트 또는 대체 필드를 포함 할 수 있습니다
{}
. 각 대체 필드에는 위치 인수의 숫자 색인 또는 키워드 인수의 이름이 있습니다. 각 교체 필드가 해당 인수의 문자열 값으로 대체되는 문자열의 복사본을 반환합니다.이 메소드는 Python 3.0의 새로운 표준이며
%
형식화 보다 선호됩니다 .
사용 예는 다음과 같습니다.
>>> '%s for %s' % ("tit", "tat")
tit for tat
>>> '{} and {}'.format("chicken", "waffles")
chicken and waffles
>>> '%(last)s, %(first)s %(last)s' % {'first': "James", 'last': "Bond"}
Bond, James Bond
>>> '{last}, {first} {last}'.format(first="James", last="Bond")
Bond, James Bond
'{self.author} in {self.publication}'.format(self=self)
는 "작동"해야한다고 제안하는 것처럼 보인다 . 나는 모든 것에 대해 잘 모르겠습니다 unicode
.
{first[0]}
에서 초기 값을 얻는 데 사용할 수있었습니다 J
.
값을 괄호 안에 넣어야합니다.
'%s in %s' % (unicode(self.author), unicode(self.publication))
여기서, 제에 대한 배치됩니다. 그리고 초 동안 의이 사용됩니다.%s
unicode(self.author)
%s
unicode(self.publication)
참고 : 표기법
string formatting
보다 선호해야합니다%
. 더 많은 정보는 여기에
%s
그보다는 여전히 제안한다고 믿을 수 없다format
지금까지 게시 된 답변 중 일부에는 중요한 문제가 unicode()
있습니다. 기본 인코딩 인 디코딩은 종종 ASCII입니다. 실제로, unicode()
바이트를 문자로 변환하여 주어진 바이트를 "감지"시키려고합니다. 따라서 이전 답변에서 권장하는 다음 코드는 내 컴퓨터에서 실패합니다.
# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))
제공합니다 :
Traceback (most recent call last):
File "test.py", line 3, in <module>
print '{0}'.format(unicode(author))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
오류는 author
ASCII 바이트 만 포함하지 않고 (예 : [0; 127] 값) unicode()
기본적으로 (많은 컴퓨터에서) ASCII에서 디코딩 한다는 사실에서 발생 합니다 .
강력한 솔루션은 필드에 사용 된 인코딩을 명시 적으로 제공하는 것입니다. UTF-8을 예로 들어 보겠습니다.
u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))
(또는 u
유니 코드 결과 또는 바이트 문자열을 원하는지 여부에 따라 이니셜이없는 ).
이 시점에서 author
and publication
필드를 포맷하는 동안 디코딩하는 대신 유니 코드 문자열로 사용하는 것이 좋습니다.
'{} in {}'
형식 문자열).