Pessoal, bom dia!
Estou tentando ler o conteúdo de um arquivo binário em Python para montar um dicionário, mas ao atingir o final do arquivo o programa está "voando" e não estou conseguindo capturar a exceção. Quando faço o debug, vejo que ele inclui os dados no dicionário corretamente, mas ao chegar na última posição do arquivo, o comando pickle.load(arquivo) "voa" e nenhuma outra linha de código após o while é executada. Nem o comando arquio.close() é executado.
Abrindo o arquivo .dat em um bloco de notas, a exibição dele é semelhante ao seguinte trecho:
S'001'
p0
.S'Toninho Silva'
p0
.S'Prefeito'
p0
.S'Tijuca'
p0
.S'2300'
p0
.
O código que lê do arquivo binário, grava no dicionário e, ao final, exibe na tela o resultado (que é parte do conteúdo do dicionário) segue abaixo:
try:
dic_votos_candidato = dict()
arquivo = open('eleicoes.dat', 'rb')
while arquivo:
soma = 0
cod_candidato = pickle.load(arquivo)
nome_candidato = pickle.load(arquivo)
cargo = pickle.load(arquivo)
regiao = pickle.load(arquivo)
num_votos = pickle.load(arquivo)
if dic_votos_candidato.get(nome_candidato):
soma = int(dic_votos_candidato[nome_candidato])
soma = soma + int(num_votos)
dic_votos_candidato[nome_candidato] = soma
else:
dic_votos_candidato[nome_candidato] = int(num_votos)
arquivo.close()
for chave in dic_votos_candidato.keys():
print chave, dic_votos_candidato[chave]
except IOError:
print "Erro ao abrir o arquivo. Verifique se o arquivo foi criado."
print "Caso o arquivo ainda nao exista, use a opcao 1 do menu principal para cria-lo."
exit()
finally:
opcao = raw_input('\nPara continuar, digite a opcao desejada: ')
trata_listar(opcao)
Desde já agradeço a ajuda!