动态处理python字符串或列表

时间:2010-08-18 05:13:46

标签: python

numberofrow, 其值在表单字段中动态设置。

现在因为numberofrow在多个表中, 当我从表格中收到该变量时,

如果只有一个numerofrow,它的字符串,例如。 numberofrow = 01

如果不止一个numberofrow,它是一个列表,例如。 numberofrow = [01,02,04]

现在我如何区分我的python代码中的列表或字符串?

我正在考虑使用,

if type(numberofrow).__name__=='list':
    #do this
else:
    #do this

谢谢, 晴天。

3 个答案:

答案 0 :(得分:5)

为此,有一个名为isinstance的内置版本。您可以使用它来检查对象是否是该类的实例(并且与您的解决方案相比,此测试中也考虑了超类)。

if isinstance(numberofrow, list):
    # do this
else:
    # do that

isinstance(numberofrow, basestring)之类的事情很常见。 basestring是Python 2中两种字符串类型的超类 - str和unicode - 测试将匹配它们。

或者,您也可以提供可能的类/类型的元组,如isinstance(numberofrow, (list, tuple))。如果实例是列表或元组的实例,则此测试将成功。

答案 1 :(得分:4)

您使用什么框架从表单中获取该值?一个明智的人肯定会提供一种方法来返回总是一个列表 - 具体来说,如果该值只输入一次,则是一个项目列表(如果该值尚未输入,则可能所有,一个空列表。)

例如,对于年龄较大的cgi,您可以使用getlist实例的FieldStorage方法 - form.getlist('numberofrow')代替form.getvalue('numberofrow')行为如你所描述的那样,返回一个字符串或一个列表 - 这样可以更简单,更优雅地解决所有问题!

答案 2 :(得分:1)

你可以做你说的,但更好的方法是:

if isinstance(numberofrow, list):
    # do this
else:
    # do that

另一种方法是将对象用作字符串,并在出现错误时更改行为:

try:
    validated = numberofrow.isdigit()
except AttributeError:
    # must be a list?
    # do something else
else:
    # must be a string
    # do the string thing

如果它像字符串一样,那么它是否是一个字符串并不重要。