2017-04-20 5 views
0

pygal을 사용하여 테이블을 만들고 있는데, link의 예제는 으로 잘 작동하지만 아래에서 변경했습니다.문자열 레코드가있는 pygal을 사용하여 막 대형 테이블을 만드는 방법.

TypeError: unsupported operand type(s) for -: 'str' and 'int'

가 어떻게이 pygal 테이블에서 문자열 기록을 포함 할 수 있습니다 : 나는이 목록에 문자열 값을 추가하고있는 파이어 폭스 열의

line_chart = pygal.Bar() 
line_chart.title = 'Browser usage evolution (in %)' 
line_chart.x_labels = map(str, range(2002, 2013)) 
line_chart.add('Firefox', ["Hello", 'world', 'aaa', 'bbbb', 'ccc', 'cccc', 'dddd', 'eee', 'ffff', 'gggg', 'hhhh']) 
line_chart.add('Chrome', [None, None, None, None, None, None, 0, 3.9, 10.8, 23.8, 35.3]) 
line_chart.add('IE',  [85.8, 84.6, 84.7, 74.5, 66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1]) 
line_chart.add('Others', [14.2, 15.4, 15.3, 8.9, 9, 10.4, 8.9, 5.8, 6.7, 6.8, 7.5]) 
line_chart.value_formatter = lambda x: '%.2f%%' % x if x is not None else '∅' 
line_chart.render_table(style=True) 

, 그것은 같은 나에게 오류를주고있다?

답변

0

이 선을 이해하는 것이 필요 해요 문제를 이해하기 :

line_chart.value_formatter = lambda x: '%.2f%%' % x if x is not None else '∅' 
밖으로 문자열 값을 얻기 위해 각 테이블 값에 적용 할 기능에 복용 무엇 pygal 여기하고있다

실제 테이블에 넣을 수 있습니다. 이 경우 포맷터는 숫자 (int 또는 float)를 사용하고 형식 지정을 위해 이전 포맷 구문을 사용합니다. '%.2f%%' % x basically은 "x를 여기에두고 문자열 표현을 수정하여 소수점 두 자리 이상을 표시 한 다음 끝에 '%'기호를 추가합니다. 또한이 람다 함수는 숫자가 아니므로 문자열 값을이 형식으로 서식을 지정하면 None 값이 작동하지 않으므로 값을 None이 아닌지 확인한 다음 해당 null 문자를 출력합니다.

원래 예제에서 모든 테이블 값은 숫자 값입니다. 파이어 폭 컬럼/행을 문자열 값으로 대체하면 포맷터가 작동하지 않습니다. 귀하의 오류는 문자열 값에 적용 할 수없는 lambda x: '%.2f%%' % x if x is not None else '∅' 함수에서 발생합니다. 이 문제를 해결하려면 A : 문자열 값을 허용하도록 포맷터를 변경하거나 B : 문자열 대신 숫자를 사용하도록 firefox에서 값을 변경하십시오.

당신은 그렇게 (즉 type(value) == int를 사용하여) 당신이 유형에 대한 검사를 추가 할 수 있습니다이를 변경하거나 당신은 또한 문자열 정수를 사용하려는 경우, 먼저 변환을 시도, 문자열 기록을 원했다 (즉, int(value) 또는 float(value)). 문자열 검사 int에 대한 자세한 내용은 this post을 참조하십시오.

예를 들어 귀하의 포맷터 람다 함수의 힘이 될 :

lambda x: '%.2f%%' % x if type(x) is int or type(x) is float else '∅' 

당신이 변환 검사 같은 것을 수행하려는 경우, 당신은 시도해야 할 것 : 캐치 : 그것을, 당신은 확인해야합니다 있도록 람다 대신에 실제 포매터 함수.