动态处理python字符串或列表

问题描述:

numberofrow, 它的值是在表单字段中动态设置的。动态处理python字符串或列表

现在

因为numberofrow是在多个表中, 当我接收从形式变量,

如果只有一个numerofrow,其字符串,用于离。 numberofrow = 01

如果多于一个numberofrow,它的一个列表,例如。 numberofrow = [01,02,04]

现在我如何区分是否它的列表或字符串在我的Python代码?使用

在想,

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

感谢, 阳光。

+2

重复http://*.com/questions/3227552/what-is-the-pythonic-way-of-differentiating-between-a-string-and-a-list? – Johnsyweb 2010-08-18 05:37:48

为此目的,有一个内置称为isinstance。你可以用它来检查一个对象是否是这个类的一个实例(和你的解决方案相比,在这个测试中也考虑了超类)。

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

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

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

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

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 

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

+0

因为代码很大,所以 有可能,如果numberofrow是字符串,将它转换成一个列表,使用与numberofrow相同的变量名称,然后做其余的编码? – sunny 2010-08-18 05:37:13

+0

@sunny,这是一个好主意。这是亚历克斯谈论的数据总是列表的好处。所以,就像你说的,如果它是一个字符串,把它变成一个列表。你必须小心,因为字符串在许多方面都像列表一样行事(都是序列并具有该接口)。 – 2010-08-18 05:55:34

+0

@ Eric,我是这样工作的。 @Alex,我正在使用plone框架。 感谢所有的解决方案。 – sunny 2010-08-18 06:02:53

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

例如,具有良好的老cgi,你会使用FieldStorage实例的getlist方法 - 的form.getlist('numberofrow')代替form.getvalue('numberofrow')象你所说的,返回一个字符串或列表,它的行为 - 这将解决你所有的问题更加简单和优雅!