Lab04 - Erros comuns
Solução - Ixiii... Deu Erro! e agora?¶
A Importância de Interpretar Erros no Python
Programar é uma atividade desafiadora. Não importa o seu nível de conhecimento, inevitavelmente encontrará erros em seu código.
No entanto, esses erros não são simplesmente obstáculos; eles são oportunidades valiosas de aprendizado. Interpretar erros em Python é uma habilidade crucial por várias razões:
- Diagnóstico Rápido: Compreender a mensagem de erro acelera o processo de identificação do problema. Em vez de vasculhar linhas e linhas de código, você pode ir direto ao ponto problemático.
- Desenvolvimento de Solução: Uma interpretação precisa do erro fornece insights sobre como corrigi-lo. Isso economiza tempo e reduz a- frustraçãoassociada à tentativa e erro.
- Aprendizado Profundo: Cada erro é uma lição. Ao entender por que um erro ocorreu, você internaliza princípios fundamentais de programação e evita cometer o mesmo erro no futuro.
- Confiança: Encarar e superar erros fortalece sua resiliência e confiança como programador. Você se sente mais preparado para enfrentar desafios mais complexos, sabendo que pode decifrar e corrigir problemas que surgirem.
Tipos Comuns de Erros em Python¶
- Erros de Sintaxe (Syntax Errors): Estes são os erros mais básicos e geralmente mais fáceis de identificar. Eles ocorrem quando o Python não consegue entender seu código. Pode ser algo simples, como esquecer um- :ao definir uma função ou não fechar um parêntese- ). A boa notícia é que o interpretador Python geralmente aponta exatamente onde o erro ocorreu, tornando mais fácil sua correção.
- Erros de Runtime (Runtime Errors): Estes erros são um pouco mais insidiosos, pois só aparecem quando você executa seu programa. Isso inclui coisas como tentar- dividir por zero, tentar acessar um arquivo que não existe, ou- referenciar uma variável que não foi definida. Ao contrário dos erros de sintaxe, os erros de runtime podem não ser tão diretos para identificar, pois podem depender de condições específicas dentro do programa.
- Erros Semânticos (Semantic Errors): Estes são os mais desafiadores de todos. Seu programa é executado sem erros visíveis e não retorna nenhuma mensagem de erro. No entanto, ele não faz o que você esperava. O desafio aqui é que o interpretador Python não pode ajudá-lo, pois tecnicamente, tudo está "correto". Estes erros exigem uma análise profunda da lógica e do fluxo do programa. A depuração passo a passo e a revisão do código são ferramentas valiosas para identificar onde as coisas deram errado.
Vamos praticar um pouco¶
print('Olá, mundo!")
File "<ipython-input-1-15a41a3ccf62>", line 1 print('Olá, mundo!") ^ SyntaxError: EOL while scanning string literal
# Solução
print("Olá, mundo!")
print('Olá, mundo!')
Olá, mundo! Olá, mundo!
print("Olá mundo"
File "<ipython-input-3-da27efeb691f>", line 1 print("Olá mundo" ^ SyntaxError: unexpected EOF while parsing
# Solução
print("Olá, mundo!")
Olá, mundo!
7casas = 4
File "<ipython-input-5-c269be13d752>", line 1 7casas = 4 ^ SyntaxError: invalid syntax
# Solução
sete_casas = 4
seteCasas = 4  ## Camel case
sete7casas = 4
casa = 1
str(input("digite o primeiro numero")
''
# Solução
str(input("digite o primeiro numero"))
'0'
a = str(input("digite o primeiro numero")) # 3
b = str(input("digite o segundo numero")) # 3
print(a+b) ## concatenando dois valores
53
# solução
a = float(input("digite o primeiro numero (real)")) # 3
b = int(input("digite o segundo numero (inteiro)")) # 3
print(a+b) ## concatenando dois valores 
# solução2
a = str(input("digite o primeiro numero (real)")) # 3
b = str(input("digite o segundo numero (inteiro)")) # 3
print(int(a)+float(b)) ## concatenando dois valores
def minha_funcao()
    return "Olá, mundo!"
File "<ipython-input-14-af16dcebc17d>", line 1 def minha_funcao() ^ SyntaxError: invalid syntax
# Solução
### função 
# def nome_da_funcao():
def minha_funcao():
    return "Olá, mundo!"
resultado = minha_funcao()  ### estou chamando a minha função
print(resultado)
Olá, mundo!
idade = 18
if idade = 18:
    print("Maior de idade")
File "<ipython-input-19-274b47e24894>", line 2 if idade = 18: ^ SyntaxError: invalid syntax
# Solução
idade = 18   ##### = é uma atribuição,  a variavel idade recebe o valor 18
if idade == 18:      ###   ==  é a forma de fazer comparação, verdadeiro ou falso
    print("Maior de idade")
Maior de idade
def saudacao():
print("Olá!")
File "<ipython-input-26-3ca3bbbc0d2b>", line 2 print("Olá!") ^ IndentationError: expected an indented block
# Solução
def saudacao():
    print("Olá!")
nome = "João"
print(Nome)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-28-0a0afa2a6809> in <module> 1 nome = "João" ----> 2 print(Nome) NameError: name 'Nome' is not defined
# Solução
nome = "João"
Nome = "Silva"
NoMe = 3
print(Nome) ###  Case sensitive
Silva
idade = "25"
total = idade + 5
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-30-021ee738685d> in <module> 1 idade = "25" ----> 2 total = idade + 5 TypeError: can only concatenate str (not "int") to str
# Solução
idade = 25
total = idade + 5
print(total)
30
#solução2 com erro
idade = "25.4"  #### esse numero é real 
total = int(idade) + 5 ### numero real não pertence aos inteiros
print(total)
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-38-9c96686f2c74> in <module> 2 3 idade = "25.4" ----> 4 total = int(idade) + 5 5 print(total) ValueError: invalid literal for int() with base 10: '25.4'
#solução2 corrigido
idade = "25.4"  #### esse numero é real 
total = float(idade) + 5 ### numero real não pertence aos inteiros
print(total)
30.4
resultado = 10 / 0
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-40-605c3bec262d> in <module> ----> 1 resultado = 10 / 0 ZeroDivisionError: division by zero
# Solução
resultado = 10 / 0.0000001
import mathh
--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-42-dafd3c5d3188> in <module> ----> 1 import mathh ModuleNotFoundError: No module named 'mathh'
# Solução
import math
import pandas
import pandas as pd
def somar(a, b):
    return a + b
resultado = somar(5)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-50-072ac009b981> in <module> 2 return a + b 3 ----> 4 resultado = somar(5) TypeError: somar() missing 1 required positional argument: 'b'
# Solução
def somar(a, b):
    return a + b
resultado = somar(5,5)
int("python")
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-54-9ae652162590> in <module> ----> 1 int("python") ValueError: invalid literal for int() with base 10: 'python'
# Solução
"python"
'python'
idade = 25
print("Minha idade é: " + idade)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-56-07d6225f6874> in <module> 1 idade = 25 ----> 2 print("Minha idade é: " + idade) TypeError: can only concatenate str (not "int") to str
# Solução
idade = 25
print(f"Minha idade é: {idade}")  ### f"   {variavel}  " dentro de chaves
print("Minha idade é:",idade)
Minha idade é: 25 Minha idade é: 25
resultado = multiplica(5, 2)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-58-205222be5016> in <module> ----> 1 resultado = multiplica(5, 2) NameError: name 'multiplica' is not defined
# Solução
def multiplica(pedro,jose):
    return pedro * jose      #### * representa multiplicação
resultado = multiplica(5, 6)
print(resultado)
30
soma(a, b):
    return a + b
File "<ipython-input-62-53b9abc9acb8>", line 1 soma(a, b): ^ SyntaxError: invalid syntax
# Solução: Esquecer de definir uma função com def
def soma(a, b):
    return a + b
idade = 18
if idade = 18:
    idade = 12
print(f"Você tem {idade} anos.")
File "<ipython-input-66-038a56fc766c>", line 2 if idade = 18: ^ SyntaxError: invalid syntax
# solução: Esquecer o operador de comparação em uma estrutura condicional
idade = 18
if idade == 18:
    idade = 12
    
print(f"Você tem {idade} anos.")
Você tem 12 anos.
valor = 5
if valor = 10:
    valor = 20
File "<ipython-input-53-59ec2c2e20de>", line 2 if valor = 10: ^ SyntaxError: invalid syntax
# solução: Erro de operador de atribuição em vez de comparação
valor = 5
if valor == 10:
    valor = 20
def soma(a, b):
    resultado = a + b
print(soma(5, 3))
print(resultado)
None 30
# solução 
def soma(a, b):
    resultado = a + b
    print(f"resultado da função {resultado}")
    return resultado
print(soma(5, 3))
print(f"resultado fora da função: {resultado}")
resultado da função 8 8 resultado fora da função: 30
if add == 2:
    add += i
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-82-e57a47ae4057> in <module> ----> 1 if add == 2: 2 add += i NameError: name 'add' is not defined
# solução: Esquecer de iniciar uma variável antes de usá-la 
add = 2
i = 1
if add == 2:
    add += i   #### add = add + i    C (add++)
    print(add)
3
resto = 10 % 0
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-24-8f7f0e98b1d2> in <module> ----> 1 resto = 10 % 0 ZeroDivisionError: integer division or modulo by zero
# solução:
10/0
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-64-e574edb36883> in <module> ----> 1 10/0 ZeroDivisionError: division by zero
# solução:
def verificar_igualdade(a, b):
    return a = b
verificar_igualdade(2, 3)
File "<ipython-input-85-8515e9477153>", line 2 return a = b ^ SyntaxError: invalid syntax
# solução 
def verificar_igualdade(a, b):
    return a == b
verificar_igualdade(2, 3)
False
def calcular_media(a, b):
    return (a + b) / 3
calcular_media(8,8)
5.333333333333333
#solução 
def calcular_media(a, b):
    return (a + b) / 2   #### tem que dividir por 2
calcular_media(8,8)
8.0