13.7 Exercícios: Exceções
- 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
- 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
- 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): passNo 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 ?
- 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.
- 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?
- 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.
- 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.')- (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.