13.7 Exercícios: Exceções

  1. Na classe Conta , modifique o método deposita() . Ele deve lançar uma exceção chamada ValueError , que já faz parte da biblioteca padrão do Python, sempre que o valor passado como argumento for inválido (por exemplo, quando for negativo):
def deposita(self, valor): if (valor < 0):
python
raise ValueError else:
 
self._saldo += valor
 
  1. Da maneira com está, apenas saberemos que ocorreu um ValueError , mas não saberemos o motivo. Vamos acrescentar uma mensagem para deixar o erro mais claro:
def deposita(self, valor): if(valor < 0):
python
raise ValueError('Você tentou depositar um valor negativo.') else:
 
self._saldo += valor
 
Obs.: modifique também a implementação do método deposita() da classe ContaPoupanca da mesma maneira que fizemos na classe Conta , lançando um ValueError caso o valor passado seja negativo.
 
3. Faça o mesmo para o método saca() da classe ContaCorrente , afinal o cliente também não pode sacar um valor negativo.
 
python
def saca(self, valor): if(valor < 0):
python
raise ValueError('Você tentou sacar um valor negativo.') else:
 
self._saldo -= valor
 
  1. Vamos validar também que o cliente não pode sacar um valor maior do que o saldo disponível em conta. Crie sua própria exceção chamada SaldoInsuficienteError . Na pasta src , crie o arquivo

excecoes.py e a classe SaldoInsuficienteError que deve herdar de RuntimeError .

class SaldoInsuficienteError(RuntimeError): pass

No método saca da classe ContaCorrente , vamos utilizar esta nova exceção:

class ContaCorrente(Conta): # código omitido
python
def saca(self, valor): if (valor < 0):
python
raise ValueError('Você tentou sacar um valor negativo.') if (self._saldo < valor):
 
raise SaldoInsuficienteError('Saldo insuficiente.') self._saldo -= (valor + 0.10)
 
Obs.: modifique também a implementação do método saca() da classe Conta , lançando os erros ValueError e SaldoInsuficienteError da mesma maneira que fizemos na classe ContaCorrente .
 
5. Agora crie uma ContaCorrente e chame o método saca() , passando um valor negativo:
 
java
if name == ' main ':

cc = ContaCorrente(‘123-4’, ‘João’, 1000.0)

valor = -1000.0 cc.saca(valor)

O que acontece ?

  1. Precisamos tratar o erro para não parar a execução do programa. Utilize um bloco try/except para isso:
if name == ' main ':

cc = ContaCorrente(‘123-4’, ‘João’, 1000.0) valor = -1000.0

try:
 
cc.saca(valor)
 
java
print(f'Saque de {} realizado com sucesso {valor}') except ValueError:
python
print('O valor a ser sacado deve ser um número positivo.')

Rode o programa acima e veja o que acontece.

  1. Agora tente sacar um valor maior do que o saldo:
if name == ' main ':

cc = ContaCorrente(‘123-4’, ‘João’, 1000.0) valor = 5000.0

try:
 
cc.saca(valor)
 
java
print(f'Saque de {} realizado com sucesso. {valor}')

188 13.7 EXERCÍCIOS: EXCEÇÕES

except ValueError:
 
java
print('O valor a ser sacado deve ser um número positivo.')

O que acontece?

  1. Modique o programa e faça com que o erro SaldoInsuficienteError não seja lançado quando o valor for maior do que o saldo da conta.
if name  == ' main ':

cc = ContaCorrente(‘123-4’, ‘João’, 1000.0) valor = 5000.0

try:
 
cc.saca(valor)
 
java
print(f'Saque de {} realizado com sucesso. {valor}') except ValueError:
python
print('O valor a ser sacado deve ser um número positivo.') except SaldoInsuficienteError:
python
print('Você não possui saldo suficiente para concluir esta operação.')

Não esqueça de fazer os imports necessários.

  1. Faça testes com o método deposita() . Tente depositar um valor negativo e veja o que acontece.
if name  == ' main ':

cc = ContaCorrente(‘123-4’, ‘João’, 1000.0) valor = -1000.0

try:
 
cc.deposita(valor)
 
java
print(f'Depósito de {} realizado com sucesso. {valor}') except ValueError:
python
print('O valor a ser depositado deve ser um número positivo.')
  1. (Desafio) Este código simula uma operação de saque feito por um caixa eletrônico e poderia ser encapsulado em uma classe que represente o caixa. Crie uma classe chamada CaixaEletronico com os métodos que represente as operações de depósito e saque. Depois, instancie um objeto do tipo CaixaEletronico e teste seus métodos.

⬅️ Capítulo Anterior | Próximo Capítulo ➡️