首页 > 解决方案 > Tkinter 条目返回 ValueError: invalid literal for int() with base 10: ''

问题描述

所以今天我一直在使用 tkinter 开发一个新的 GUI,并且遇到了将字符串从条目解析为 int 的问题,我收到了这个错误。

Traceback (most recent call last):
  File "/Users/g.shiner21/Desktop/Python/P2PFile/P2PFileServer.py", line 47, in <module>
    bStartServer = Button(f1, text="Start Server", command=startServer(host))
  File "/Users/g.shiner21/Desktop/Python/P2PFile/P2PFileServer.py", line 28, in startServer
    intport = int(port)
ValueError: invalid literal for int() with base 10: ''

这是功能,

def startServer(host):
    port = ePort.get()
    intport = int(port)
    s = socket.socket()
    s.bind((host, intport))
    s.listen(4)

最令人困惑的部分是,当我测试这样的东西时,

strTest = "10000"
intTest = int(strTest)

我没有错误。所以我不认为我做错了解析。但在这一点上,我不太确定。任何帮助将不胜感激!:)

编辑:对于那些在这里有帮助的是完整的程序(或者至少是我到目前为止所拥有的。我在构建 GUI 时注释掉了它的第二部分,因为我不想处理任何干扰。

# server.py

import socket                   # Import socket module
import sys
from tkinter import *
from tkinter import ttk

port = 0                  # Reserve a port for your service.
s = socket.socket()             # Create a socket object
host = "0.0.0.0" 

root=Tk()
root.title("Test Window")

c = '#ececec'

n = ttk.Notebook(root)  #Create notebook
f1 = ttk.Frame(n)   #Create frames for notebook
f2 = ttk.Frame(n)
f3 = ttk.Frame(n)
n.add(f1, text='Server')    #Add frames to notebook
n.add(f2, text='File')
n.add(f3, text='Playback')
n.pack(expand=1, fill='both')   #Pack notebook

def startServer(host):
    port = ePort.get()
    intport = int(port)
    s = socket.socket()
    s.bind((host, intport))
    s.listen(4)

lservType = Label(f1, text="Select Server Type: ", bg=c)
lservType.grid(columnspan=2, row=0)

R1 = Radiobutton(f1, text="Local Host", variable=host, value="localhost", bg=c)
R1.grid(row=1, column=0)
R2 = Radiobutton(f1, text="Wireless Host", variable=host, value="0.0.0.0", bg=c)
R2.grid(row=1, column=1)

lPort = Label(f1, text="Port: ", bg=c)
ePort = Entry(f1)

lPort.grid(row=2, column=0, sticky='e')
ePort.grid(row=2, column=1)

bStartServer = Button(f1, text="Start Server", command=startServer(host))
bStartServer.grid(row=3, columnspan=2)

"""
port = 60000                    # Reserve a port for your service.
s = socket.socket()             # Create a socket object
host = "0.0.0.0"                # Get local machine name
s.bind((host, port))            # Bind to the port
s.listen(4)                     # Now wait for client connection.
#print("Your IP address is: " + socket.gethostbyname(socket.gethostname()))

print ('Server listening....')

while True:
    conn, addr = s.accept()     # Establish connection with client.
`    print ('Got connection from', addr)
    input ('Press the enter key to send')

    filename = 'send.mov'
    print ('File Assigned')
    f = open(filename,'rb')
    print ('File Oppened')
    l = f.read(131072)
    print ('Reading')
    while (l):
        conn.send(l)
        print('Sent ',repr(l))
        l = f.read(131072)
        print ('Reading')
    f.close()

    print('Done sending')
    conn.close()
#sys.exit()
"""
root.mainloop()

标签: pythonpython-3.xparsingtkinter

解决方案


当 python 无法将变量转换为 int 时,您会收到此错误。确保“端口”是一个整数,并尝试将其转换为 int。第二个示例工作正常,因为您对 input 的值进行了硬编码,并且它是一个整数。您可以按如下方式更新您的功能:

def startServer(host):
    try:
        port = ePort.get()
        intport = int(port)
        s = socket.socket()
        s.bind((host, intport))
        s.listen(4)
    except BaseException:
        print('wrong entry')

推荐阅读