Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中检查参数的类型?_Python_Python 2.7 - Fatal编程技术网

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

如何在Python中检查参数的类型?,python,python-2.7,Python,Python 2.7,我正在写一个程序,其中用户输入一个以10为基数的数字,然后转换成另一个或同一个基数的数字 def convert(a,b) 其中a是输入,b是新基。如果b不是整数,如果b假设没有值,即为空,或者如果b是小于1的整数,则指示程序返回值-1 我知道如何转换数字,如果b小于1,我知道如何让程序返回-1,但是如果b为空或不是整数,我如何让程序返回-1?简短回答:不要 类型检查不是Pythonic。试着做你想做的事情,如果成功了,它就成功了,如果失败了,它就会抛出一个异常 同样,在失败时返回-1也不是很

我正在写一个程序,其中用户输入一个以10为基数的数字,然后转换成另一个或同一个基数的数字

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

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

简短回答:不要

类型检查不是Pythonic。试着做你想做的事情,如果成功了,它就成功了,如果失败了,它就会抛出一个异常

同样,在失败时返回-1也不是很符合Python,通常,您希望在失败时抛出异常。在一些罕见的情况下,这是有意义的,但一般来说,这意味着您必须检查值,而不仅仅是在需要时捕获异常,这使得更难发现错误。值为-1而不是获取异常


详细回答:如果确实需要,那么可以使用检查值是否为整数,但是,这破坏了Python的duck类型,因此99.9%的情况下这是一个坏主意。它也不一定按您所期望的方式工作-例如,bool是int的一个子类,因此isinstanceTrue,int将返回True-这可能是您想要的,也可能不是您想要的。

这是检查b值的一种方法

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

我的建议是把你所有的东西都转换成int。这更像是python:它接受任何可以像整数一样工作的东西,即使严格来说不是int类型。同时,它确保你在编写代码时只需要担心int

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

看起来像是家庭作业。你的老师没有教你良好的编程实践

Python程序员通常按原样接受值。如果可能的话,内置python函数将把变量转换成必要的类型。如果不可能,则由调用函数执行某种操作。这就是所谓的duck类型。 如果您知道输入将来可能会导致问题,那么可以添加一些断言语句来防止错误的输入

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

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

请参阅。如果必须使用iInstance,通常最好对照检查,而不是使用int。