python - 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()
解决方案
当 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')
推荐阅读
- python - 如何从父类构造函数中获取变量并在子类中使用它?
- python - pandas to_sql 无法适应类型“dict”
- javascript - 如何动态更改导入的 css 文件
- r - ggplot2图例在一行顶部显示点:如何防止它?
- python - 如何测试 Python Pandas 中多列的最大平局
- flutter - 扩展类时如何使用提供者/消费者
- php - 使用 fpdi 和 fpdf 库从 phpmailer 发送 pdf union
- javascript - 为什么用 jsonpath-plus 解析 JSON 会抛出 TypeError?
- rust - 找不到正确的生命周期参数来存储加载的字体
- c# - 关于这个 Unity 代码不起作用的任何线索?