MST

星途 面试题库

面试题:Go error处理与函数设计

假设你正在设计一个函数,该函数需要进行复杂的文件读取和解析操作,可能会遇到文件不存在、文件格式错误等多种错误情况。请详细说明如何合理设计该函数的返回值,包括如何处理和传递error,以确保调用者能够清晰地了解错误来源和类型,同时给出代码示例。
10.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 返回值设计思路
    • 对于这种涉及复杂文件读取和解析且可能出现多种错误的函数,一个常见的做法是返回一个包含结果和错误信息的结构体或元组。
    • 在许多编程语言中,如Python,可以使用try - except块来捕获可能出现的异常,并将异常信息作为错误返回给调用者。
    • 为了让调用者清晰了解错误来源和类型,可以自定义错误类型,将不同类型的错误(文件不存在、文件格式错误等)用不同的自定义错误类表示。
  2. 代码示例(Python)
class FileNotFoundErrorCustom(Exception):
    pass


class FileFormatErrorCustom(Exception):
    pass


def read_and_parse_file(file_path):
    try:
        with open(file_path, 'r') as file:
            content = file.read()
            # 这里假设简单的文件格式是每行以逗号分隔,进行简单解析
            lines = content.split('\n')
            data = []
            for line in lines:
                if line:
                    parts = line.split(',')
                    if len(parts) != 2:
                        raise FileFormatErrorCustom(f"Invalid line format: {line}")
                    data.append((parts[0], parts[1]))
            return data, None
    except FileNotFoundError:
        return None, FileNotFoundErrorCustom(f"File {file_path} not found.")
    except Exception as e:
        return None, e


# 调用示例
result, error = read_and_parse_file('nonexistent_file.txt')
if error:
    if isinstance(error, FileNotFoundErrorCustom):
        print(f"File not found error: {error}")
    elif isinstance(error, FileFormatErrorCustom):
        print(f"File format error: {error}")
    else:
        print(f"Unexpected error: {error}")
else:
    print(f"Parsed data: {result}")
  1. 代码解释
    • 首先定义了两个自定义错误类FileNotFoundErrorCustomFileFormatErrorCustom,分别用于表示文件不存在和文件格式错误。
    • read_and_parse_file函数尝试打开文件并读取内容,然后进行简单的格式解析。如果文件不存在,捕获FileNotFoundError并返回自定义的文件不存在错误。如果文件格式不符合预期,抛出并捕获自定义的文件格式错误。其他未预料到的错误也一并捕获并返回。
    • 在调用示例中,根据返回的错误类型进行不同的处理,让调用者能清晰知道错误来源和类型。