2010-08-09 233 views
5

如果args是整數,我需要做一件事,如果args是字符串,則需要做一件事。如何檢查變量的類型? Python

我該如何檢查類型?例如:

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() 

回答

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和字節串 - 這樣既工作。

在Python3中,內建類型已從types庫中刪除,並且只有一個字符串類型。 這意味着類型檢查看起來像isinstance(s, int)isinstance(s, str)

+0

你的權利。是一覽。 – Pol 2010-08-09 14:30:41

+0

是否有任何使用'isinstance(s,types.IntType)'而不是'isinstance(s,int)'的偏好呢?還是僅僅爲了與你提到的兩種類型的字符串一致?只是好奇。 – 2010-08-09 14:35:31

+1

您的解決方案與python 3.1不兼容! – banx 2010-08-09 14:37:11

0
type(variable_name) 

然後,你需要使用:

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

上面,我們比較如果變量參數的個數類型是一樣的文字0這是一個整數,如果你想知道例如類型是否長,您與type(0l)等比較。

+0

我不明白。 如何使用它? – Pol 2010-08-09 14:28:18

+4

呃。 'type(2)'是'int',但無論如何,'type'是不好的Python – katrielalex 2010-08-09 14:29:41

0

如果您知道您期待的是整數/字符串參數,則不應該將其吞入*args。不要

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

你也可以嘗試做一個更Python的方式,而不使用typeisinstance(首選,因爲它支持繼承):

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

這顯然取決於什麼呢do_some_other_thing()

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 

當然這也假設在嘗試任何其他操作將拋出一個TypeError。

+0

其實我已經提到它:) – systempuntoout 2010-08-09 14:45:03