【问题标题】:Determining whether an iterable is a string or list in python确定可迭代对象是python中的字符串还是列表
【发布时间】:2016-05-02 16:51:45
【问题描述】:

我制作了一个包含多个复选框的 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 视为一个列表?或者有人对我如何解决这个问题有任何其他建议吗?

【问题讨论】:

标签: python html cgi


【解决方案1】:
if isinstance(a_variable,basestring):
   #its a string of sorts
elif isinstance(a_variable,(list,tuple)):
   #its a list or table

我猜?

【讨论】:

  • 哈哈谢谢@timgeb!我不是英语专业的有一个很好的理由:P
【解决方案2】:

如果处理代码不是完全琐碎的,一个很好的习惯用法是尽早检查类型并将简单的情况转换为更一般的情况;在这种情况下,如果值不是列表,则将其转换为单元素列表。剩下的代码可以依赖于获取一个列表,让你不必重复自己:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 2010-12-29
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多