从python中的函数返回错误字符串

时间:2013-05-08 22:48:51

标签: python python-2.7 python-3.x

我在Python中有一个类函数,它返回成功或失败,但如果发生故障,我希望它返回一个特定的错误字符串。我有三种方法:

  1. 将变量error_msg传递给最初设置为None的函数,如果出现错误,则将其设置为错误字符串。例如:

    if !(foo(self, input, error_msg)):
        print "no error"
    else:
        print error_msg
    
  2. 从函数中返回一个包含bool和error_msg的元组。

  3. 我在出现错误时引发异常并在调用代码中捕获它。但是由于我没有看到我正在处理的代码库中经常使用异常,所以不太确定采用这种方法。

  4. Pythonic的做法是什么?

2 个答案:

答案 0 :(得分:8)

创建自己的异常并改为:

class MyValidationError(Exception):
    pass

def my_function():
    if not foo():
        raise MyValidationError("Error message")
    return 4

然后您可以将您的功能称为:

try:
    result = my_function()
except MyValidationError as exception:
    # handle exception here and get error message
    print exception.message

这种风格被称为EAFP(“更容易要求宽恕而不是许可”),这意味着您可以正常编写代码,在出现问题时引发异常并稍后处理:

  

这是常见的Python   编码风格假定存在有效的键或属性   如果假设被证明是假的,则捕获异常。这干净又快   风格的特点是存在许多尝试和除外   声明。该技术与许多人共同的LBYL风格形成鲜明对比   其他语言,如C.

答案 1 :(得分:5)

提出错误:

if foo(self, input, error_msg):
    raise SomethingError("You broke it")

处理它:

try:
    something()
except SomethingError as e:
    print str(e)

这是Pythonic方法,最具可读性。

返回像(12, None)之类的元组似乎是一个很好的解决方案,但是如果你不一致的话,很难跟踪每个方法返回的内容。返回两种不同的数据类型甚至更糟糕,因为它可能会破坏采用常量数据类型的代码。