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 afrustração
associada à 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 tentardividir por zero
, tentar acessar um arquivo que não existe, oureferenciar 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