变量类型检查

时间:2013-01-13 12:35:48

标签: python python-2.7

我有一个包含字符串的列表。这些字符串是单词或整数值。例如,此列表可能如下所示:

['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']

现在,基于它们的类型(整数或字符串),我想以不同的方式对待它们。但是,正如您所注意到我无法使用isinstace()。我仍然可以使用type()并尝试使用int()函数转换整数值,并将整个事物放在try-except方法中,以避免引发单词转换的错误。但这对我来说似乎很骇人听闻。你知道处理这种情况的正确方法吗?提前谢谢!

4 个答案:

答案 0 :(得分:3)

我采取了不同的方法。如果你知道所有可能的"特殊"单词,检查这些。其他一切都必须是int:

keywords = {'Negate', 'SPECIALCASE'}
tmp = []
for i in lis:
    if i in keywords:
        tmp.append(i)
    else
        tmp.append(int(i))

当然,如果你想接受除了没有转换的整数之外的任何东西,那么试图转换并回归到未转换的使用是可行的。

答案 1 :(得分:3)

“不要求许可,请求原谅”的pythonic方式:

lst = ['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']

for item in lst:
    try:
        int_number = int(item)
    except ValueError:
        # handle the special case here

请注意,如果您希望列表中只有少数项目成为“特殊”案例项,则应该这样做。否则将检查作为@doomster建议。

答案 2 :(得分:0)

供参考,这是一种正则表达式方法。这可能有点矫枉过正。

mylist = ['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']

import re
p = re.compile(r'-?\d+')
[p.match(e) is not None for e in mylist]
# returns [True, False, True, True, False, True]

对于任何以True开头的字符串,返回包含-的列表,然后包含一个或多个数字; False用于任何其他字符串。

或者,如果您不需要列表但只想执行不同的操作:

for item in mylist:
    if p.match(item):
        # it's a number
    else:
        # it's a string

上述工作因为None(即不匹配)评估为False,其他任何事情(当涉及正则表达式匹配时)评估为True。如果您想更明确,可以使用if p.match(item) is not None:

答案 3 :(得分:0)

您可以使用类型转换来检查它是整数还是字符串,

def is_integer(input):
  try:
    int(input)
    return True
  except:
    return False

for item in ['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']:
  if is_integer(item):
     ...
  else:
     ...