ValueError: int() 以 10 为基数的无效文字:'' 使用 tkinter

Posted

技术标签:

【中文标题】ValueError: int() 以 10 为基数的无效文字:\'\' 使用 tkinter【英文标题】:ValueError: invalid literal for int() with base 10: '' Using tkinterValueError: int() 以 10 为基数的无效文字:'' 使用 tkinter 【发布时间】:2021-03-14 11:32:42 【问题描述】:

我一直在用 Tkinter 编写一个 GUI 来将连接所需的信息放入数据库 (mysql),但我遇到了这个问题

ValueError: int() 以 10 为底的无效文字:''

这就是 GUI 的样子

这是按钮的功能

def connect_bd():
    list = []

    user = txt_user.get()
    password = txt_pass.get()
    host = txt_host.get()
    port = int(txt_port.get())
    database = txt_database.get()

    list.append(user)
    list.append(password)
    list.append(host)
    list.append(port)
    list.append(txt_database)

    return list

剩下的就这些了

bdEntry = connect_bd()    

mydb = mysql.connector.connect(
         user = bdEntry[0],
         password = bdEntry[1],
         host = bdEntry[2],
         port = bdEntry[3],
         database = bdEntry[4]
         )

函数中出现三个错误:

  File "BuscarBD - copia.py", line 140, in <module>
    bdEntry = connect_bd()
  File "BuscarBD - copia.py", line 92, in connect_bd
    puerto = int(txt_port.get())
  ValueError: invalid literal for int() with base 10: ''

有人知道怎么解决吗?

【问题讨论】:

问题只是你试图将一个空字符串转换为一个整数。这通常是因为您在用户有机会输入任何数据之前调用了代码。您的错误消息显示设置 puerto 但您没有提供执行此操作的代码。请提供minimal reproducible example,说明如何以及何时触发导致错误的代码。 【参考方案1】:

我觉得这样

puerto = int(txt_puerto.get())

txt_puerto.get() 返回的值是十进制字符串。例如:

>>> int('12.8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12.8'

你需要做的就是返回

>>> int(float(12.8))

【讨论】:

我猜这是因为,当代码运行时, tkinter.mainloop() 会像 ('') 一样放置一个空值。我实际上不知道这是否可以成为其中的一部分 @AlvaroNuñezMendoza 您应该尝试打印输出并找出导致错误的代码部分 根据问题中的错误信息,txt_puerto.get() 正在返回一个空字符串,而不是一个浮点数。【参考方案2】:

你需要围绕端口转换为int编写保护代码

try:
    port = int(txt_port.get())
except ValueError:
    pass
    # Your logic goes here - what do you want to do if we dont have an int?

【讨论】:

还是不行,我猜我会用 PyQt5 作为 GUI,不过谢谢你的帮助! 不确定我理解“仍然无法正常工作”是什么意思。 即使使用try except 也有其他问题,使用tkinter.mainloop()。当 mainloop() 结束时,我不知道为什么,函数的值停留在 0

以上是关于ValueError: int() 以 10 为基数的无效文字:'' 使用 tkinter的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:int() 的无效文字,以 10 为底错误

ValueError: int() 以 10 为基数的无效文字:''

Django - ValueError: int() 以 10 为基数的无效文字:''

ValueError: int() 以 10 为底的无效文字:'10025.0'

ValueError: int() 以 10 为底的无效文字:'196.41'

ValueError: int() 以 10 为基数的无效文字:'' 使用 tkinter