0
votes

La variable est vide même si vous écrivez quelque chose

Lorsque j'essaie de générer un mot de passe, même si vous entrez la longueur Python indique que la variable longueurtr est vide.

C'est l'erreur que Python me donne: < Pré> xxx

Voici mon code: xxx


9 commentaires

Veuillez visiter et lire Stackoverflow.com/help fournit également un exemple de travail minimal. Votre code est trop complexe.


Vous avez créé une entrée, puis immédiatement appelé .get () dessus. Vous avez reçu une chaîne vide, bien sûr - où imaginez-vous que toute autre valeur pourrait être venue? Vous devez faire le .get () dans la fonction de la commande = de la touche, qui ne se produira probablement pas avant que l'utilisateur ait saisi quelque chose.


qu'est-ce que longueur retour


Vous devez d'abord comprendre Event-Driven_Programmer . Lisez par [tkinter] Programmation entraînée < / a>


@IsaacFrank Je pense que c'est la longueur du mot de passe que les demandes utilisateur, mais je pourrais avoir tort ...


De plus, lorsque vous exécutez ce def générer (longueur): Longueur de retour Il n'exbliera plus de code dans cette fonction.


@ Thetechrobo36414519 Exactement, il retourne la longueur avant la fin de toute logique.


Oui @isaacFrank, mais alors ce qu'il arrive passgen = "" .join (Choix (caractères) pour x dans la plage (longueur)) passwd = tk.entry (fenêtre) passwd.insert (0, passags) passwd.grid ( rangée = 5, colonne = 0, collant = "n") ?


Ça ne marche pas ..


3 Réponses :


0
votes

La raison pour laquelle vous obtenez cette erreur est probablement parce que vous n'avez rien entré dans l'entrée () . Pour éviter cette erreur, utilisez un essayer et sauf .

Ce serait la création du bouton: xxx


5 commentaires

Pour éviter cette erreur, ils doivent avoir un bouton qui l'obtient. Si le programme utilise ce code, immédiatement lorsque l'entrée est rendue, elle essaiera ceci - et s'il n'y a rien dans l'entrée ... Eh bien, ça ne va pas La valeur, et ils obtiendront NameError S s'ils essaient de l'utiliser.


@ Thetechrobo36414519 fixe.


Vous pouvez avoir une liste d'erreurs pour économiser de l'espace, par exemple: sauf (ValueError, NameError): . De plus, je pense que si, sinon devrait faire l'affaire également par chèque si la boîte d'entrée est vide ou non.


@Saad merci! Je ne le savais pas.


@ 10Rep je voulais dire, vous utilisez sauf: passez au lieu d'essayer à nouveau jusqu'à ce que est aucune erreur ... Si c'était dans une boucle ou qu'il y avait un bouton comme le L'utilisateur a cliqué sur (comme dans ma réponse), ce serait bien. Si vous le faites de cette façon (n'essayez qu'une seule fois, d'essayer plusieurs fois, effectuez votre code dans une boucle tandis que si elle est réussie (aucune exception) Exécuter break ) et l'entrée était vide ... ils obtiendraient l'erreur qu'ils utilisaient tous - convertir une chaîne ( '' '' ) dans un entier.



0
votes

Pour éviter cette erreur, vous devez appeler .get () code> seulement strud> lorsque l'utilisateur est entré dans le texte; à cet effet, je suggère d'utiliser un bouton:

def getTextFromEntry(theEntry):
    global lengthstr
    lengthstr = length.get()
    print(lengthstr)

def generatepassword():
    generatefunction.destroy()
    seepassbutton.destroy()
    text.destroy()

    textgen = "Genera una Password"
    textgen = tk.Label(window, text=textgen, fg="#333333", font=("Helvetica", 32, "bold"))
    textgen.grid(row=0, column=0, sticky="N")

    length = tk.Entry(window, justify="center")
    length.grid(row=2, column=0, pady=10, ipadx=42)
    getValue = Button(text="Generate password", command=getTextFromEntry)
    getValue.pack()
    textgen = "Inserisci la lunghezza della Password"
    textgen = tk.Label(window, text=textgen, fg="#333333", font=("Helvetica", 10))
    textgen.grid(row=3, column=0, sticky="N")

    generatebutton = tk.Button(window, text="Genera", font=("Helvetica", 12, "bold"), bg="#007acc", activebackground="#66c2ff", command=lambda: generate(int(lengthstr)))
    generatebutton.config(relief="flat")
    generatebutton.grid(row=4, column=0, pady=6, ipady=1, ipadx=240)


0 commentaires

2
votes
 generatebutton = tk.Button(window, ..., command=lambda:generate(int(float(lengthstr)))

4 commentaires

Vous avez raison, je pense que la valeur de longueur est la chaîne de "" c'est pourquoi il donne un ValueError: ... int () avec base 10: '' ' erreur.


Oui .. op tente d'obtenir le champ de saisie lors de l'initialisation lorsque l'utilisateur n'a entré aucun texte.


Le correctif est simple, on peut passer longueurtr sans convertir en float ou int , puis dans générer fonctionne la valeur de LongueurR peut être vérifié avec quelques déclarations simples if-ele .


Oui, ou mieux obtenir toujours l'entrée dans la méthode génératrice.