当前位置: 首页 > 面试题库 >

python上关于错误与成功的返回值的最佳实践

胥玮
2023-03-14
问题内容

一般的 ,假设你有一个像下面的方法。

def intersect_two_lists(self, list1, list2):
    if not list1:
        self.trap_error("union_two_lists: list1 must not be empty.")
        return False
    if not list2:
        self.trap_error("union_two_lists: list2 must not be empty.")
        return False
    #http://bytes.com/topic/python/answers/19083-standard
    return filter(lambda x:x in list1,list2)

在发现错误的该特定方法中,在这种情况下,我不想返回空列表,因为这可能是对此特定方法调用的真正答案,我想返回一些内容以指示参数不正确。因此,在这种情况下,如果出错,我将返回False,否则返回一个列表(是否为空)。

我的问题是,在这样的领域中,不仅针对列表,什么是最佳实践?返回我想要的任何内容,并确保将其记录下来以供用户阅读?:-)你们大多数人都在做什么:

  1. 如果成功,您应该返回True或False并发现错误?
  2. 如果成功,您应该返回列表,然后发现错误?
  3. 如果成功,您应该返回文件句柄,而您遇到错误?
  4. 等等

问题答案:

首先,无论做什么都不会返回结果和错误消息。这是处理错误的一种非常糟糕的方法,并且会引起您无尽的头痛。 如果您需要指出错误,则总是引发异常

除非有必要,否则我通常会避免引发错误。在您的示例中,实际上并不需要抛出错误。将一个空列表与一个非空列表相交不是一个错误。结果只是空列表,这是正确的。但是,假设您要处理其他情况。例如,如果该方法具有非列表类型。在这种情况下,最好提出一个例外。没什么可害怕的。

我的建议是查看类似功能的Python库,并了解Python如何处理这些特殊情况。例如看一下集合中的交集方法,它往往是宽容的。在这里,我试图将一个空集与一个空列表相交:

>>> b = []
>>> a = set()
>>> a.intersection(b)
set([])

>>> b = [1, 2]
>>> a = set([1, 3])
>>> a.intersection(b)
set([1])

仅在需要时抛出错误:

>>> b = 1
>>> a.intersection(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

当然,在某些情况下,成功或失败返回True或False可能会很好。但是保持一致非常重要。该函数应始终返回相同的类型或结构。具有可以返回列表或布尔值的函数非常令人困惑。或返回相同的类型,但是在发生错误的情况下此值的含义可以不同。

编辑:

OP说:

我想返回一些内容以指示参数不正确。

没有什么比错误更能说明错误了。如果要指示参数不正确,请使用html" target="_blank">异常并输入有用的错误消息。在这种情况下返回结果只是令人困惑。在其他情况下,您可能希望指示什么都没有发生,但这不是错误。例如,如果您有一种方法可以从表中删除条目,而请求删除的条目不存在。在这种情况下,在成功或失败时仅返回True或False可能会很好。这取决于应用程序和预期的行为



 类似资料:
  • 我担心我们返回错误给客户的方式。 我们是否在收到错误时通过抛出HttpResponseException立即返回错误: 或者累积所有错误,然后发送回客户端: 这只是一个示例代码,验证错误或服务器错误都无关紧要,我只是想知道最佳实践,每种方法的优缺点。

  • 这是我的操作方法 返回此错误的最佳实践是什么?以一种用户友好的方式,并且在发生错误时我可以识别该错误。

  • 问题内容: 今天,我在登录表单后面添加了额外的安全检查,以减缓暴力攻击。我有多个登录表单,并提供了一个易于调用的函数,该函数可以进行所有检查,然后返回结果。 问题是结果不是单个值,结果包括: 为此,我创建了一个新类。这一切都很好。 但是我经常有方便的实用程序函数,这些函数会返回多个值,并开始发现每次为结果创建一个新类都有些烦人。 有没有更好的方法来返回多个值?还是我只是懒惰?:) 问题答案: 不,

  • 我已经构建了一个使用AJAX提交表单数据的登录脚本。 PHP部分在没有AJAX的情况下运行良好。但是系统不能与AJAX实现一起工作。 它始终显示以下消息,即使 PHP 文件返回 true[正确的用户名 用户名/密码不正确 超文本标记语言Result Div JQuery fn_login.php 有人可以指出代码/实践中的错误吗? 刚刚尝试禁用AJAX,当用户名/密码正确时,PHP文件可以正确回显

  • 保存package.json依赖项的最佳实践是什么? 例如,我看到很多依赖项是不固定的,比如:

  • 问题内容: 我有以下JS 和以下控制器代码: addarticle()javascript ajax可以运行并将vars发送到服务器并进入db,但是,javascript然后将运行错误函数而不是成功函数。http响应代码是200,我以为它将运行Success函数。有什么建议? 问题答案: 您需要从控制器返回json,因为这是jQuery期望的。您可以返回即 或者,您可以将html设置为数据类型(也