当我尝试生成密码时,即使输入长度,Python也会说变量lengthstr
为空
这是Python给我的错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/home/salvatore/Python Projects/Password Saver/Ps.py", line 35, in <lambda>
generatebutton = tk.Button(window, text="Genera", font=("Helvetica", 12, "bold"), bg="#007acc", activebackground="#66c2ff", command=lambda: generate(int(lengthstr)))
ValueError: invalid literal for int() with base 10: ''
这是我的密码:
def generate(length):
return length
chars = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&£*()?"
passgen = "".join(choice(chars) for x in range(length))
passwd = tk.Entry(window)
passwd.insert(0, passgen)
passwd.grid(row=5, column=0, sticky="N")
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)
lengthstr = length.get()
print(lengthstr)
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)
出现此错误的原因可能是您没有在
Entry()
中输入任何内容。要避免此错误,请使用try
和except
这将是按钮的创建:
但错误来自于对按钮的命令
您试图将无效文字转换为int,lengthstr的值是多少?如果它是浮点文本,例如“1.5”,则必须先转换为浮点,然后再转换为int,如下所示:
编辑:
我找到了您的
lengthstr
变量,在执行此操作时lengthstr = length.get()
条目将是''
,这是一个空字符串,无法转换为Int将
lengthstr = length.get()
移动到generate函数中,这样,用户单击按钮后,您的按钮只会获得输入字段,然后您就可以转换为int删除函数参数,然后在命令中调用函数
为避免此错误,您只需在用户输入文本时调用
.get()
;为此,我建议使用按钮:(我确信使用
lambda
可以更容易地做到这一点,但这是我能做到的最好的方法;)您还可以尝试在循环中使用
try
和except
语句(如@10Rep的答案,但获取值(.get()
)和转换为int
),并在成功时停止循环相关问题 更多 >
编程相关推荐