编写仅采用特定类型的方法的正确python方法是什么?

时间:2010-11-14 21:38:46

标签: python

我有一个应该接受字符串的函数,在必要时将其附加到其中,然后返回结果。

我的自然倾向是返回结果,其中涉及字符串连接,如果失败,则让异常浮动到调用者。但是,此函数有一个默认值,我只是返回未修改。

我的问题是:如果有人向该方法传递了意外的内容,并返回了用户不期望的内容,该怎么办?该方法应该失败,但如何强制执行?

4 个答案:

答案 0 :(得分:5)

没有必要这样做,但是如果你想要你可以让你的方法提升TypeError,如果你知道该对象属于你无法处理的类型。这样做的一个原因是帮助人们理解为什么方法调用失败并给他们一些修复它的帮助,而不是从函数的内部给它们模糊的错误。

标准库中的一些方法可以做到这一点:

>>> [] + 1
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can only concatenate list (not "int") to list

答案 1 :(得分:2)

您可以使用装饰器进行此类操作,您可以看到示例here

但强制​​参数属于特定类型并不是非常pythonic。

答案 2 :(得分:1)

Python假设我们都是阅读文档的智能成人。如果您仍想这样做,则不应断言实际类型,而是在参数不支持您需要的操作时捕获异常,例如:

def foo(arg):
    try:
        return arg + "asdf"
    except TypeError:
        return arg

答案 3 :(得分:0)

默认值与它有什么关系?你是说你想在调用者没有通过str的情况下返回默认值吗?在那种情况下:

def yourFunc( foo ):
    try:
        return foo + " some stuff"
    except TypeError:
        return "default stuff"

Space_C0wb0y有正确的答案,如果你想要返回未经修改的arg,如果它不是一个字符串,并且还有尝试将某些内容转换为字符串的选项:

def yourFunc2( bar ):
    return str(bar) + " some stuff"

哪种适用于很多不同的类型。