Cookie Consent by Free Privacy Policy Generator 📌 A arte do erro sem mensagem: por que meu código Python interpretou minha variável como tupla ao invés de int

🏠 Team IT Security News

TSecurity.de ist eine Online-Plattform, die sich auf die Bereitstellung von Informationen,alle 15 Minuten neuste Nachrichten, Bildungsressourcen und Dienstleistungen rund um das Thema IT-Sicherheit spezialisiert hat.
Ob es sich um aktuelle Nachrichten, Fachartikel, Blogbeiträge, Webinare, Tutorials, oder Tipps & Tricks handelt, TSecurity.de bietet seinen Nutzern einen umfassenden Überblick über die wichtigsten Aspekte der IT-Sicherheit in einer sich ständig verändernden digitalen Welt.

16.12.2023 - TIP: Wer den Cookie Consent Banner akzeptiert, kann z.B. von Englisch nach Deutsch übersetzen, erst Englisch auswählen dann wieder Deutsch!

Google Android Playstore Download Button für Team IT Security



📚 A arte do erro sem mensagem: por que meu código Python interpretou minha variável como tupla ao invés de int


💡 Newskategorie: Programmierung
🔗 Quelle: dev.to

Primeiramente, preciso agradecer imensamente a ajuda da @jesstemporal. Ela quem me apoiou no entendimento do meu código e me trouxe a reflexão de porque determinado comportamento acontecia em sua execução: eu queria um int para representar um dia e, na verdade, meu código interpretou como tupla.

Gif de uma criança olhando confusa com as mãos viradas pra cima

É, eu sei, não faz o menor sentido e eu não estava entendendo como aquilo acontecia. Percebe que isso é um erro, mas não aqueles que dão mensagem e tudo mais? Então eu gastei um certo tempo tentando entender. E isso pode acontecer diversas vezes conosco (principalmente se já estivermos cansadas durante os estudos).

Bom, eu estava estudando Python com Programação Orientada a Objetos. E um dos exercícios, o objetivo era criar uma classe para representar uma data (com dia, mês e ano) e uma forma de retorná-la no formato: dd/mm/yyyy. E a ideia era construir isso na mão.

Certo. Então eu fiz duas coisas:

  • o arquivo main.py;
  • o arquivo data.py para desenvolver a classe Data.

O código da classe Data ficou assim:

class Data:
    def __init__(self, day, month, year):
        self.day = day,
        self.month = month,
        self.year = year

    def format_date(self):
        print(f"{self.day}/{self.month}/{self.year}")

Existe a possibilidade de você já ter identificado o erro. Mas vamos por partes para que todes possam acompanhar o que aconteceu. Entenda que, para mim, essa classe estava desenvolvida da forma correta. Afinal eu fiz o construtor, defini os parâmetros e atributos e também desenvolvi a função que formataria a data que fosse enviada.

Certo? Ok, não tão certo assim. Mas veja também como eu desenvolvi a main:

from datas import Data


def main():
    data = Data(
        day=21,
        month=11,
        year=2007
    )

    data.format_date()


if __name__ == '__main__':
    main()

Até aqui, tudo bem também. Eu criei o objeto data a partir da classe Data, já passando alguns valores para que eu pudesse chamar a função para imprimir na tela e testar.

O resultado que eu esperava, neste caso, era:

21/11/2007

E o resultado que eu recebi foi:

(21,)/(11,)/2007

Algumas horas depois, pesquisando e mexendo no código, tentando entender o que estava acontecendo, eu acabei desistindo e indo dormir. No dia seguinte, a @jesstemporal me mostrou o que estava causando esse problema: uma vírgula. SIM, APENAS UMA F*CKING VÍRGULA. Duas, na verdade. Segue o raciocínio.

Conhecendo a tupla

Tuplas, segundo a documentação do Python, porque aqui só saímos de casa com a bibliografia pronta e na mão, são sequências imutáveis, normalmente utilizadas para coleções de dados diversos.

Para saber que uma sequência de dados é uma tupla, precisamos verificar como ela foi escrita. A vírgula define que aquela sequência é uma tupla. Ou seja:

data = (dia, mes, ano) # esta é uma tupla
data2 = dia, mes, ano # esta também é uma tupla

Perceba que o parêntese não é necessário. Mas como dissemos, o que define a tupla é o uso da vírgula.

Tupla não é lista

É importante também ressaltar que a tupla não é uma lista, apesar de lembrar uma. Assim como a vírgula é o que define a tupla, a lista é definida pelo uso de []. Ou seja:

meses = ["Janeiro", "Fevereiro", "Março"] # esta é uma lista

Entendendo onde estava o erro

Se você voltar no meu código, vai perceber que eu adicionei vírgula após os atributos day e month.

class Data:
    def __init__(self, day, month, year):
        self.day = day, # aqui temos uma vírgula intrusa
        self.month = month, # e aqui também
        self.year = year

Talvez por vício de outras linguagens, eu acabei adicionando a vírgula no final, achando que isso encerraria aquela linha/comando. Mas no Python, isso não é necessário. Apenas o fato de estar em outra linha, a linguagem já entende que é outro comando.

O jeito certo, seria o código estar da seguinte forma:

class Data:
    def __init__(self, day, month, year):
        self.day = day # sem vírgula por aqui
        self.month = month # aqui também
        self.year = year

E assim, ao criar o objeto e chamar o format_date(self), o resultado será como o esperado:

21/11/2007

Espero que tenha gostado do conteúdo. E que ele tenha te inspirado a não desistir dos erros sem mensagens quando eles acontecerem com você.

Eu sei que isso parece mais assustador do que os erros que possuem mensagem, mas lembre-se sempre de descansar, pesquisar com calma e, quem sabe, contar com a ajuda da comunidade para entender o que está acontecendo.

Só não desista de evoluir. Bons estudos! E bons erros!

...



📌 A arte do erro sem mensagem: por que meu código Python interpretou minha variável como tupla ao invés de int


📈 414.9 Punkte

📌 Acceso Remoto Seguro: Por que es importante y por que hay que hacerlo bien


📈 91.78 Punkte

📌 Como ter certeza que meu código esta bem testado


📈 79.7 Punkte

📌 O Que é Design de Código e Por Que Isso Importa


📈 74.15 Punkte

📌 O passo a passo de como criei meu portfólio e como você pode fazer o mesmo


📈 58.39 Punkte

📌 Mais do que armazenamento de código: 5 features do GitHub que você não conhece


📈 53.69 Punkte

📌 Cómo (y por qué) borrar la caché del Mac


📈 52.84 Punkte

📌 Como corrigir o erro "Sua Conexão Não É Particular"


📈 48.73 Punkte

📌 Como tem sido o meu processo criativo para escrever um livro infantil sobre programação


📈 42.96 Punkte

📌 A importância de conhecer sobre UX como desenvolvedor e meu desespero na farmácia


📈 42.96 Punkte

📌 No es por ti patrones de diseño, es por el performance: Abstracciones de un emulador de la NES con Typescript


📈 40.92 Punkte

📌 Por trás do código: Revelando o lado sombrio do desenvolvimento de aplicativos


📈 40.25 Punkte

📌 Low CVE-2021-25647: Testes-codigo Testes de codigo


📈 39.58 Punkte

📌 .NET Source Generators: gerando código em tempo de escrita de código!


📈 39.58 Punkte

📌 Avast - Instale agora e vá fazer o que você mais gosta sem preocupações


📈 39.2 Punkte

📌 Avast - Instale agora e vá fazer o que você mais gosta sem preocupações


📈 39.2 Punkte

📌 O que é e como trabalhar com Ambientes Virtuais em Python


📈 38.86 Punkte

📌 Como criar um Servidor Web Java Sem Framework


📈 37.67 Punkte

📌 Por que você deveria priorizar a documentação de suas experiências


📈 37.41 Punkte

📌 Por que você deveria aprender Crystal?


📈 37.41 Punkte

📌 Testing de componentes React: ¿cuándo y por qué necesitamos usar act()?


📈 37.41 Punkte

📌 Por que aprender OCaml?


📈 37.41 Punkte

📌 Por que "tudo junto" é separado e "separado" é tudo junto? : divagações sobre estrutura de testes em .NET


📈 37.41 Punkte

📌 ¿Por qué desarrollar en Ruby on Rails?


📈 37.41 Punkte

📌 ¿Por qué debería usar Ruby on Rails?


📈 37.41 Punkte

📌 Por que autenticação e autorização são importantes para desenvolvedores?


📈 37.41 Punkte

📌 Helpers por que utiliza-los?


📈 37.41 Punkte

📌 Angular Signals: Por que surgiu?


📈 37.41 Punkte

📌 Arrays vs Objetos en JavaScript: Cuándo y Por Qué Utilizarlos


📈 37.41 Punkte

📌 Por que a sua desorganização financeira vai acabar com a sua carreira de dev!


📈 37.41 Punkte

📌 Por que é vital aprender a dizer não no ambiente profissional


📈 37.41 Punkte

📌 Por que eu não me (re)coloco no mercado?


📈 37.41 Punkte

📌 Como solicitar a remoção de conteúdo em produtos do Google por motivos legais


📈 35.89 Punkte

📌 Cómo solicitar la eliminación de contenido de los productos de Google por motivos legales


📈 35.89 Punkte

📌 Cómo aumentar tu cuota de correo electrónico de 200 a 50,000 mensajes por día en 24 horas con AWS-SES.


📈 35.89 Punkte











matomo