【问题标题】:Effective method of error handling a function错误处理函数的有效方法
【发布时间】:2020-05-09 04:37:52
【问题描述】:

错误处理函数示例:

def read_file():
    try:
        with open(filename, 'rb') as fd:
            x = fd.read()
    except FileNotFoundError as e:
        return(e)
    return(x)

我会这样调用函数:

file = read_file("test.txt")
if file:
    #do something

有没有比多次使用 return 更高效/有效的方法来处理错误?

【问题讨论】:

  • 如果返回错误,您的主代码会发生什么?您会再次检查file 是错误还是字符串?我会说raise e 而不是return,然后还要处理函数调用。毕竟,如果出现错误,你就不想继续了
  • 你能提供一个例子作为答案吗?
  • 如果没有更多的代码或目的上下文,这有点困难,因为现在看来我会放弃这个功能。 try/except 块独立完成这项工作

标签: python-3.x exception error-handling


【解决方案1】:

捕获e然后返回很奇怪;为什么您的函数的用户希望返回错误而不是引发错误?返回错误不会处理它,它只是将责任传递给调用者来处理错误。让错误被引发是让调用者负责处理它的更自然的方式。所以根本不捕获错误是有道理的:

def read_file(filename):
    with open(filename, 'rb') as fd:
        return fd.read()

对于您想要编写if file: 以测试文件是否存在的所需用例,您的read_file 函数可以捕获错误并返回None,因此您的if 条件将是错误的:

def read_file(filename):
    try:
        with open(filename, 'rb') as fd:
            return fd.read()
    except FileNotFoundError:
        return None

但是,这意味着如果调用者不知道该函数可能会返回 None,则在预期文件数据的位置使用 None 而不是 FileNotFoundError 时会出错,并且识别代码中的问题将更加困难。

如果您确实打算使用可能不存在的文件名来调用您的函数,则将函数命名为 read_file_if_exists 之类的名称可能是一种更好的方式来明确使用不存在的文件名调用此函数不是认为是一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多