【发布时间】:2014-11-26 21:38:40
【问题描述】:
我已经使用 wxFormBuilder 创建了一个 GUI,它应该允许用户将“企业访问者”的名称输入到列表中,然后单击两个按钮中的一个来返回访问该企业的最频繁和最不频繁访问者。
我创建了一个较早的版本,不幸的是,它给了我访问者的范围,而不是最常/最不常访问者的名称。我附上了我创建的 GUI 的屏幕截图,以帮助澄清问题 (http://imgur.com/XJnvo0U)。
新的代码版本与早期版本采用不同的策略,我无法让它抛出任何东西。相反,我不断收到此错误:
ValueError: max() arg 是一个空序列
关于这条线:
self.txtResults.Value = k.index(max(v))
import wx
import myLoopGUI
import commands
class MyLoopFrame(myLoopGUI.MyFrame1):
def __init__(self, parent):
myLoopGUI.MyFrame1.__init__(self, parent)
def clkAddData(self,parent):
if len(self.txtAddData.Value) != 0:
try:
myname = str(self.txtAddData.Value)
self.listMyData.Append(str(myname))
except:
wx.MessageBox("This has to be a name!")
else:
wx.MessageBox("This can't be empty")
def clkFindMost(self, parent):
self.listMyData = []
unique_names = set(self.listMyData)
frequencies = {}
for name in unique_names:
if frequencies.get[name]:
frequencies[name] += 1
else:
frequencies[name] = 0
v = list(frequencies.values())
k = list(frequencies.keys())
self.txtResults.Value = k.index(max(v))
def clkFindLeast(self, parent):
unique_names = set(self.listMyData)
frequencies = {}
for name in unique_names:
if frequencies.get(name):
frequencies[name] += 1
else:
frequencies[name] = 0
v = list(frequencies.values())
k = list(frequencies.keys())
self.txtResults.Value = k.index(min(v))
myApp = wx.App(False)
myFrame = MyLoopFrame(None)
myFrame.Show()
myApp.MainLoop()
【问题讨论】:
-
当
len(v) == 0,在clkFindMost,max(v)引发ValueError。 -
当您在 max() 中传递空列表时会出现这种类型的错误。所以检查列表是否可用,而不是将其传递给最大值