如何在Python中检查参数的类型?

时间:2012-05-21 21:23:14

标签: python python-2.7

我正在编写一个程序,用户在基数10中输入一个数字,以便在不同(或相同)的基础上转换为该数字。

def convert(a,b)

其中a是输入,b是新基数。如果b不是整数,如果b假定没有值(即空白),或者b是小于1的整数,则指示程序返回值“-1”。

我知道如何转换数字,我知道如果b小于1,如何使程序返回-1,但如果b为空或不是整数,如何让程序返回-1? / p>

4 个答案:

答案 0 :(得分:14)

简答:不要。

类型检查不是Pythonic。尝试做你想做的事情,如果它有效,它就可以工作,如果没有,它会引发异常。

同样,在失败时返回-1并不是非常Pythonic,通常,您希望在失败时抛出异常。有一些(罕见)情况这是有道理的,但一般来说,这意味着您必须检查值(而不是仅仅在需要时捕获异常)并且更难发现错误(值为{{1}而不是得到一个例外)。

答案很长:如果你真的需要,那么你可以使用isinstance(value, int)检查一个值是否是一个整数,然而,这会破坏Python的鸭子类型,因此99.9%的时间是一个坏主意。它也不一定符合您的预期 - 例如,-1bool的子类,因此int将返回isinstance(True, int) - 这可能是也可能不是你想要的。

答案 1 :(得分:1)

这是一种可以检查b值的方法。

def convert(a, b=None):
    if isinstance(b, int) and b > 1:
        return do_convert(a, b)
    return -1

答案 2 :(得分:0)

我的建议是采取你所拥有的任何东西并尝试将其变成int。这更像是Pythonic:它可以像整数一样工作,即使严格来说它不是int类型。同时,它确保您在编写代码时只需担心int

def convert(n):
    try:
       n = int(n)
    except ValueError, TypeError:
       return -1
    # here, do the conversion and return the result

答案 3 :(得分:0)

看起来像家庭作业。你的老师并没有教你良好的编程习惯。

Python程序员通常会按原样获取值。如果可能,内置的python函数会将变量转换为必要的类型。如果不可能,则由调用函数来执行某种操作。这叫做鸭子打字。 如果您知道输入可能会在将来导致问题,您可以添加一些断言语句以防止输入错误。

您可以使用isinstance()函数检查您的变量是否为整数。您可以通过检查变量是否为真来检查它是否为空。

如果这不是家庭作业,转换基础的最佳方法是使用内置的int(a, b)函数。