4.1 Captura de múltiplas exceções
Python permite lidar com várias exceções usando múltiplos blocos except
ou um único bloco except
com uma tupla de exceções. Vamos explorar os dois métodos.
Múltiplos blocos except
Você pode usar vários blocos except
para lidar com diferentes tipos de exceções de maneiras distintas.
try:
# Código que pode gerar uma exceção
result = int("abc")
except ValueError:
print("Erro: valor incorreto.")
except ZeroDivisionError:
print("Erro: divisão por zero.")
Um bloco except
com uma tupla de exceções
Você pode lidar com várias exceções em um único bloco except
, passando-as como uma tupla.
try:
# Código que pode gerar uma exceção
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"Ocorreu um erro: {e}")
Uso de except
NameError
as
var
Ao lidar com exceções, você pode usar a sintaxe except
<ExceptionType>
as
<variable>
para obter o objeto de exceção. Isso permite acessar informações sobre a exceção, como a mensagem de erro e outros atributos.
try:
# Código que pode gerar NameError
print(undeclared_variable)
except NameError as e:
print(f"Ocorreu um erro: {e}")
print(f"Tipo de erro: {type(e)}")
4.2 Escopo da variável de erro
A variável que armazena a exceção (e
no exemplo acima) está disponível somente dentro do seu bloco except
. Fora desse bloco a variável não está disponível.
try:
# Código que pode gerar NameError
print(undeclared_variable)
except NameError as e:
print(f"Ocorreu um erro: {e}")
print(f"Tipo de erro: {type(e)}")
# Aqui e já não está acessível, e a próxima linha irá gerar NameError
# print(e) # NameError: nome 'e' não está definido
Se você quiser fazer algo importante com a exceção fora do seu bloco, então você precisa salvá-la em uma variável separada. Exemplo:
exception = None
try:
# Código que pode gerar uma exceção
result = int("abc")
except ValueError as e:
exception = e
print("Erro: valor incorreto.")
except ZeroDivisionError as e:
exception = e
print("Erro: divisão por zero.")
print(exception)
Observe que a variável exception
armazena a última exceção ocorrida, o que pode ser útil para processamento posterior fora do bloco try
.
4.3 O que é útil no erro
O objeto de exceção contém informações sobre o erro. Dependendo do tipo de exceção, o objeto pode conter diferentes atributos.
Aqui estão alguns atributos comuns disponíveis para a maioria das exceções:
-
args
: Uma tupla contendo os argumentos passados durante a criação da exceção. Geralmente é a mensagem de erro. -
message
: Uma string contendo a mensagem de erro (em algumas exceções). -
__str__
: Método que retorna a representação em string da exceção. Este método é usado para obter a representação textual do erro, que será retornada ao usar a funçãoprint()
no objeto de exceção.
Exemplo:
try:
# Código que pode gerar ValueError
result = int("abc")
except ValueError as e:
print(f"Ocorreu um erro: {e}")
print(f"Argumentos do erro: {e.args}")
print(f"Mensagem de erro: {str(e)}")
Exemplo de manipulação de múltiplas exceções
try:
# Código que pode gerar múltiplos tipos de exceções
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"Ocorreu um erro: {e}")
print(f"Tipo de erro: {type(e)}")
print(f"Argumentos do erro: {e.args}")
Se ocorrer um ValueError
ou ZeroDivisionError
, ele será capturado pelo bloco except
. As informações sobre a exceção estarão disponíveis através da variável e
. A saída conterá o tipo de erro e os argumentos passados durante a criação da exceção.
GO TO FULL VERSION