1
resposta

INDEPENDÊNCIA ENTRE AS CLASSES DOCCPF E DOCCNPJ

Afim de testar o CNPJ e o CPF ao mesmo tempo, criei duas variáveis, chamei a classe Documento duas vezes e printei o resultado duas vezes também. No entanto, percebi que quando eu alterava para testar os erros na variável do CPF, mas deixava o CNPJ correto, ele acusava o erro e não prosseguia com o CNPJ correto. Deve ter algum tipo de dependência que não me permite chamar as duas classes ao mesmo tempo e analisar as duas separadamente.

from cpf_cnpj import Documento

cpf = '020440015511'  # cpf com 1 digito a mais
cnpj = '27865757000102' # cnpj valido

documento_cpf = Documento.criar_documento(cpf)

documento_cnpj = Documento.criar_documento(cnpj)

print(documento_cpf)
print(documento_cnpj)
Traceback (most recent call last):
  File "C:\Users\Fábio Dantas\PycharmProjects\python-brasilidades\teste.py", line 6, in <module>
    documento_cpf = Documento.criar_documento(cpf)
  File "C:\Users\Fábio Dantas\PycharmProjects\python-brasilidades\cpf_cnpj.py", line 13, in criar_documento
    raise ValueError("Documento inválido!")
ValueError: Documento inválido!

Eu imaginava que iria apontar o erro no CPF mas seguiria o processo normal para o CNPJ válido.

1 resposta

Olá, Fábio. Tudo bem?

O que acontece é que no próprio Python quando ocorre um erro e uma exceção para aquele erro é lançada, o código encerra a execução naquele ponto e te mostra a mensagem de erro.

Assim, no seu código como houve um erro na criação do CPF, ele não seguirá com a execução do restante do código.

Para evitar que isso aconteça você pode utilizar o tratamento de erros e exceções com um bloco de try/except/finally. Algo semelhante ao código a seguir:

from cpf_cnpj import Documento

cpf = '020440015511'  # cpf com 1 digito a mais
cnpj = '27865757000102' # cnpj valido

try:
    documento_cpf = Documento.criar_documento(cpf)
    print(documento_cpf)
except:
    print("Houve um erro!")
finally:
    documento_cnpj = Documento.criar_documento(cnpj)
    print(documento_cnpj)

Assim, o bloco try tenta excecutar a criação do CPF e printá-lo na tela, o bloco except será executado caso ocorra um erro na etapa anterior printando na tela que houve um erro, mas sem encerrar a execução do programa. E por fim o bloco finally segue com a execução do código, criando o CNPJ e o printando na tela.

Para entender melhor e se aprofundar no tratamento de exceções, deixo como recomendação a leitura de um artigo aqui da Alura sobre o assunto:

Espero ter ajudado. Qualquer outra dúvida estou a disposição.

Abraços. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software