numberofrow, 其值在表单字段中动态设置。
现在因为numberofrow在多个表中, 当我从表格中收到该变量时,
如果只有一个numerofrow,它的字符串,例如。 numberofrow = 01
如果不止一个numberofrow,它是一个列表,例如。 numberofrow = [01,02,04]
现在我如何区分我的python代码中的列表或字符串?
我正在考虑使用,
if type(numberofrow).__name__=='list':
#do this
else:
#do this
谢谢, 晴天。
答案 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
如果它像字符串一样,那么它是否是一个字符串并不重要。