在python

时间:2016-05-02 16:51:45

标签: python html cgi

我制作了一个包含多个复选框的html页面。复选框的每个值是由问号符号分隔的两个数字,即“1?16”。

<input class="checkbox1" type="checkbox"  name ="nr_ids" id="checkbox_id" value ="1?16">Name1,16</label> <br>
<input class="checkbox1" type="checkbox"  name ="nr_ids" id="checkbox_id" value ="11?4">Name11,4</label> <br>

然后我使用python cgi读取这些信息:

NRs = form.getvalue("nr_ids")
NRids = []
for l in NRs:
    ls = l.split("?")
    NRids.append(ls)

如果你选择这两个,NR将是['1?16','11?4']。如果你只选择一个,它将是'2?14'

我想要的是列表列表,其中每对数字都是子行:[['1','16'],['11','4']]。如果我选择两个或更多复选框,这非常有效。但是,我只选择1,程序崩溃了。 NRids变为[['1'],[','],['1'],['6']]。当我尝试采用NR的类型时,没有任何打印。我不知道如何在键入函数似乎没有打印任何内容时自动检查是否已传入字符串或列表。

我如何检查是否只选择了一个复选框,所以如果不是,我不会将NR视为列表?或者有没有人有任何其他建议我如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

if isinstance(a_variable,basestring):
   #its a string of sorts
elif isinstance(a_variable,(list,tuple)):
   #its a list or table

我想?

答案 1 :(得分:0)

如果处理代码不是完全无关紧要的,那么一个很好的习惯是早期检查类型并将更简单的情况转换为更一般的情况;在这种情况下,如果值不是列表,则将其转换为单元素列表。然后,其余代码可以依赖于获取列表,从而使您无需重复自己:

if not isinstance(NRs, list):
    NRs = [ NRs ]

# Now it's a list for sure...
for l in NRs:
    ...