Curso de programação em Python aula 6 – Tratamento de erros e conversão de dados

184 11

Bem vindos á sexta aula de programação em Python.Este artigo faz parte do curso de programação em Python do Techmoz. Para acessar outras aulas do curso, por favor visite o índice do curso de programação em Python .

Objectivos da sexta aula do curso de programação em Python

  • Tratamento de erros e excepções
  • Algumas funções de conversão de dados

Daqui a pouco estaremos fazendo os nossos primeiros programas visiveis em Python, por isso explicarei agora alguns conceitos fundamentais nos programas Python. Imagina que alguém está a jogar o seu excelente jogo escrito em Python , ou a executar o seu programa(Um media player?) e de repente o seu programa fecha, ou faz coisas inesperadas! Um acidente. Esta aula ajudará a entender e a evitar estes tipos de catástrofes.

Erros e excepções em python

Por mais que você tente fazer programas bem organizados, ele sempre estará “vulnerável ” a erros e/ou excepções. Por exemplo, se pedires ao usuário a nota dos testes, e em vez de ele fornecer por algarismos fornecer por extenso, dai precisares calcular a sua media?Existem funções que processam erros em Python, enviando uma mensagem ao usuário, por exemplo. Mas antes vamos conhecer alguns erros mais comuns e saber como detecta-los.Mensagens de erro do PythonAinda lembras da aula sobre Strings em Python em que tínhamos o seguinte código:

profissao+2

Provavelmente o IDLE retornou uma mensagem estranha dizendo(caso contrário reinstale o python!!!):

profissao+2Traceback (most recent call last):File "", line 1, inprofissao+2TypeError: cannot concatenate 'str' and 'int' objects#(Você não se assustou com esta mensagem né?)

Vamos tentar entender o que dizia a mensagem,mas saiba que esta é a sintaxe básica de uma mensagem de erro em Python, decifrando esta, voce estará em condições de decifrar qualquer outra:

Traceback (most recent call last)#:-----esta linha não tem muito interesse;File ""#---Aqui indica o script em que ocorreu o erro;line 1#-------E esta é a linhain #------Aqui indica o bloco, modulo função,etc onde ocorreu o erro;profissao+2#------Esta é a transcrição da linha onde deu o erro, as vezes costuma ter uma seta em baixo, indicando o lugar exacto;TypeError: cannot concatenate 'str' and 'int' objects# ---- E esta é a mais importante linha, pois indica o tipo de erro, neste caso, cannot concatenate 'str' and 'int' objects, que quer dizer que não se pode concatenar uma string a um inteiro.(A proposito: já pensaste em fazer um curso bem básico de Inglês? Isso te irá ser muito util na sua carreira de informático!!!!).

Ao longo do curso vamos vendo outros erros que o Python pode apresentar.

Convertendo tipos de dados em python

As vezes vemo-nos obrigados a converter dados de um tipo para outro, por algum motivo. Vou mostrar agora algumas funções que fazem isto:Para converer de um tipo para outro, devemos indicar o tipo que queremos converter e a variável a ser convertida, assim:

>>>x=(tipo)()

Os tipos podem ser int ,float e str para converter para inteiro, float(real) ou string respectivamente.Recordar também que o Python possui uma função “type(x)” que devolve o tipo da variável x.Exemplos:

>>>nome="Elisio">>>type(nome)>>>idade=18>>>type(idade)>>># Veja como o Python atribuiu automaticamente os tipos as variaveis acima>>>nome+idade #concatenar strings com inteiros?Traceback (most recent call last):File "", line 1, innome+idade #concatenar strings com inteiros?TypeError: cannot concatenate 'str' and 'int' objects>>>novaidade=str(idade)>>>type(novaidade)>>>#viu?>>>nome+novaidade # E agora?'Elisio18'>>>nome +  str(idade) # Ou mais directamente:'Elisio18'>>>float(idade) # a idade passara a ser float?18.0>>>type(idade)>>>idade=float(idade) # Nao haviamos atribuido a uma variavel, Mas agora:>>>type(idade)>>>idade=int(idade)>>>type(idade)>>>nome=int(nome)Traceback (most recent call last):File "", line 1, innome=int(nome)ValueError: invalid literal for int() with base 10: 'Elisio'>>># O que se passa?

O problema é que não podemos converter uma String não numérica para uma variável numerica, é lógico não?Imagina a situação acontecer enquanto o programa está sendo rodado pelo usuário, seria um desastre. Para evitar casos como esses o Python possui uma função chamada “try-except”, para a correcção de erros que em portugues seria “tenta-se falhar” (Ja pensaste no cursinho básico de Inglês?). Veja este programa exemplo(coloque ele numa nova janela e não no shell,de preferencia):

nome=”meu nome”idade=”13”try:    idade=int(idade)except:    print “erro ao converter a idade”print “nome”

Rode o programa(F5, mais tem de gravar primeiro) e depois mude a variável idade para um valor que não pode ser convertido, para ver o resultado. Vês como o erro já não é tão assustador?

Indentação(bloco)

Para quem já programou deve saber que qualquer linguagem possui blocos de programas,por exemplo, como é que o Python ia saber o que está dentro do try e o que está dentro do except? Para isso temos de indicar o bloco do try e except usando identação(note as linha que estão para dentro no programa anterior), assim dizemos que as linhas que estão para dentro depois do try, devem ser executadas, se encontrar um erro executa as linhas do except e o programa segue normalmente(especie de begin e end do pascal ou chavetas de java e c++).Se você usa o editor de textos nativo do Python, o Python dará o inicio do bloco automaticamente logo que você coloca dois pontos na linha anterior, se usas o notepad ou outro editor qualquer, ou seja, se ele não iniciar o bloco com uma identação, você terá que faze-lo manualmente com a tecla “TAB”. Veremos mais sobre isso quando falarmos de estruturas de controle em Python, o essencial dessa lição era te familiarizar com as mensagens de erros, e mostrar que é possível controlá-los.Na verdade, usar a tecla TAB não é a melhor prática para criar blocos identados, nem em Python, nem em nenhuma outra linguagem, porque isso pode trazer problemas quando se muda de editor ou de ambiente. A melhor solução é colocar espaços manualmente, usando o separador(a tecla mais grande do teu teclado). Um bloco identado é equivalente a 4 espaços vazios na linha.Para a próxima aula faremos o nosso primeiro programa interactivo em Python, aguarde…Não se esqueça de deixar os seus comentários sobre esta aula.

(Visited 22 times, 1 visits today)