我正在尝试将User-Input生成的百分比列表放入表中。该表正在运行,并有来自e1-e24的输入。问题是某些输入为零,因此我的程序在遇到错误时会停止。
这是用户输入(由Tkinter生成):
第一列是e1-e12,第二列是e13-e24。因此,我将e1除以e13除以该行。
以下是清单:
Percents= [("%.2f" % (int(e1.get())/int(e13.get()))), ("%.2f" % (int(e2.get())/int(e14.get()))),\
("%.2f" % (int(e3.get())/int(e15.get()))),("%.2f" % (int(e4.get())/int(e16.get()))),\
("%.2f" % (int(e5.get())/int(e17.get()))),("%.2f" % (int(e6.get())/int(e18.get()))),\
("%.2f" % (int(e7.get())/int(e19.get()))),("%.2f" % (int(e8.get())/int(e20.get()))),\
("%.2f" % (int(e9.get())/int(e21.get()))),("%.2f" % (int(e10.get())/int(e22.get()))),\
("%.2f" % (int(e11.get())/int(e23.get()))),("%.2f" % (int(e12.get())/int(e24.get())))]
但是当它变为零时,它会被卡住。我尝试了try:
和except ZeroDivisionError:
,但由于它不可避免地遇到错误,因此它不会存储百分比列表中的任何内容。我希望通过循环制作列表,但尝试e(i)与e1不同,所以我被这个问题阻止了。
for i in range(1, 12):
if 5 > i:
Percents.append("%.2f" % (int(e(i).get())/int(e(i+12).get())))
编辑:基于以下答案,我尝试了:
def calc_percent(foo,bar):
try:
return ("%.2f" % (int(foo.get())/int(bar.get())))
except ZeroDivisionError:
return "0"
Percents = [calc_percent(e1,e13),calc_percent(e2,e14)]
print Percents
我得TclError: invalid command name ".286005808"
所以我将Percents
和print Percents
放在def中并获取TypeError: calc_percent() takes exactly 2 arguments (0 given)
答案 0 :(得分:3)
最好创建2个条目列表(每列一个),然后执行:
my_list = [e_left.get() / e_right.get() for e_left, e_right in zip(left_entries_list, right_entries_list) if e_right.get() != 0 else y]
y
是您决定使用的值,以防正确的值为0
。
编辑:显然您可以在列表推导中使用if
,但if...else
无法正常工作。因此,您可以使用map
代替。这是一个简化的例子:
a = [1, 2, 3, 4]
b = [1, 1, 0, 1]
# -1 or other `default value` you wish to use
my_list = map(lambda x, y: x / y if y != 0 else -1, a, b)
print my_list
>> [1.0, 2.0, -1, 4.0]
答案 1 :(得分:2)
解决此问题的最简单方法是创建一个函数定义,为您进行计算,然后您可以在那里进行错误处理。
def calc_percent(foo, bar):
try:
return "%.2f" % (int(foo)/int(bar))
except ZeroDivisionError:
return "0" # or whatever you wanted to return
然后在你的百分比定义中调用它。
percents = [calc_percent(e1.get(),e13.get()),....
您可能还想查看此帖子,了解您的实际建议:Looping over widgets in Tkinter
答案 2 :(得分:-1)
一种方法是预填充零: 百分比= [0] * 12 然后,插入尽可能:
try:
Percents[x] = #stuff
...