如何检查变量的类型?蟒蛇

时间:2010-08-09 14:25:23

标签: python variables

如果args是整数,我需要做一件事,如果args是字符串,我需要做一件事。

我怎么能打字?例如:

def handle(self, *args, **options):

        if not args:
           do_something()
        elif args is integer:
           do_some_ather_thing:
        elif args is string: 
           do_totally_different_thing()

5 个答案:

答案 0 :(得分:13)

首先,*args始终是一个列表。您想检查其内容是否为字符串?

import types
def handle(self, *args, **options):
    if not args:
       do_something()
    # check if everything in args is a Int
    elif all( isinstance(s, types.IntType) for s in args):
       do_some_ather_thing()
    # as before with strings
    elif all( isinstance(s, types.StringTypes) for s in args):
       do_totally_different_thing()

它使用types.StringTypes,因为Python实际上有两种字符串:unicode和bytestrings - 这种方式都有效。

在Python3中,内置类型已从types lib中删除,并且只有一种字符串类型。 这意味着类型检查看起来像isinstance(s, int)isinstance(s, str)

答案 1 :(得分:1)

您也可以尝试以更加Pythonic的方式执行此操作而不使用typeisinstance(首选,因为它支持继承):

if not args:
     do_something()
else:
     try:
        do_some_other_thing()
     except TypeError:
        do_totally_different_thing()

这显然取决于do_some_other_thing()的作用。

答案 2 :(得分:0)

type(variable_name)

然后你需要使用:

if type(args) is type(0):
   blabla

上面我们比较变量args的类型是否与作为整数的文字0相同,如果你想知道例如类型是否为long,则与{{1}进行比较等等。

答案 3 :(得分:0)

如果您知道您期望一个整数/字符串参数,则不应将其吞入*args。做

def handle( self, first_arg = None, *args, **kwargs ):
    if isinstance( first_arg, int ):
        thing_one()
    elif isinstance( first_arg, str ):
        thing_two()

答案 4 :(得分:0)

没有人提到它,但更容易请求宽恕原则可能适用,因为我认为你将使用该整数做某事:

def handle(self, *args, **kwargs):
    try:
        #Do some integer thing
    except TypeError:
        #Do some string thing

当然,如果整数事物正在修改列表中的值,那么您应该先检查一下。当然,如果你想循环遍历args并为整数和其他字符串做一些事情:

def handle(self, *args, **kwargs):
    for arg in args:
        try:
            #Do some integer thing
        except TypeError:
            #Do some string thing

当然这也假设try中没有其他操作会抛出TypeError。