python-cartolafc
python-cartolafc copied to clipboard
Erro em api.time(id=) quando o tenico foi demitido
Estou recenbendo o erro abaixo para api.time(id=25810384) pois o tecnico registrado foi demitido na ultima rodada e o time ainda nao foi escalado novamente.
Provavelmente o mesmo erro acontece quando um jogador eh transferido para outro pais e sai da base de dados do Cartola FC.
KeyError Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\cartolafc\api.py in time(self, id, nome, slug, as_json) 281 282 clubes = {clube['id']: Clube.from_dict(clube) for clube in data['clubes'].values()} --> 283 return Time.from_dict(data, clubes=clubes, capitao=data['capitao_id']) 284 285 def time_parcial(self, id=None, nome=None, slug=None, parciais=None):
C:\ProgramData\Anaconda3\lib\site-packages\cartolafc\models.py in from_dict(cls, data, clubes, capitao) 192 data['atletas'].sort(key=lambda a: a['posicao_id']) 193 atletas = [Atleta.from_dict(atleta, clubes, is_capitao=atleta['atleta_id'] == capitao) for atleta in --> 194 data['atletas']] 195 info = TimeInfo.from_dict(data['time']) 196 return cls(data['patrimonio'], data['valor_time'], data['pontos'], atletas, info)
C:\ProgramData\Anaconda3\lib\site-packages\cartolafc\models.py in
C:\ProgramData\Anaconda3\lib\site-packages\cartolafc\models.py in from_dict(cls, data, clubes, atleta_id, is_capitao) 60 atleta_id = atleta_id if atleta_id else data['atleta_id'] 61 pontos = data['pontos_num'] if 'pontos_num' in data else data['pontuacao'] ---> 62 clube = clubes[data['clube_id']] 63 return cls(atleta_id, data['apelido'], pontos, data['scout'], data['posicao_id'], clube, 64 data.get('status_id', None), is_capitao)
KeyError: 1
Percebi o mesmo erro, tratei uma exception na models.py na linha clube = clubes[data['clube_id']] da class Atleta(BaseModel):. O motivo é esse mesmo, se o jogador/técnico escalado sair do clube o clube_id será nulo.
A correção é essa mesmo @gumalobato, porém o ideal seria corrigir no código fonte, pois daí todos que instalarem a biblioteca já levam consigo a correção. Fiz a correção apenas na minha máquina também.
A correção é essa mesmo @gumalobato, porém o ideal seria corrigir no código fonte, pois daí todos que instalarem a biblioteca já levam consigo a correção. Fiz a correção apenas na minha máquina também.
E qual seria a correção? Tentei aqui e nao to conseguindo.
@diegobarpereira segue abaixo o print do código com a alteração efetuada, veja se ajuda. Repare que o arquivo é Models.py, a Classe a ser atualizada é a Atleta e a linha de código está salientada.
@diegobarpereira segue abaixo o print do código com a alteração efetuada, veja se ajuda. Repare que o arquivo é Models.py, a Classe a ser atualizada é a Atleta e a linha de código está salientada.
Primeiramente obrigado pela resposta e pelo código. Mas vc já rodou isso num loop de atletas de um time tentando puxar um atleta.clube.nome ?
Já sim e roda sem problema algum, abaixo trecho do código...
Já sim e roda sem problema algum, abaixo trecho do código...
Valeu brother. Realmente faltava esse If que esqueci de implementar. Obrigado pela ajuda.
Valeu, galera! Desculpa por deixar voces na mão. Estou atualizando a API para 2023 e adicionei essa correção na última versao em dev.