MST

星途 面试题库

面试题:网络编程异步开发中异常处理的常见方法

在网络编程的异步开发场景下,比如使用Python的asyncio库进行后端网络服务开发,阐述几种常见的异常处理方法,并举例说明如何捕获和处理`TimeoutError`这类与网络请求超时相关的异常。
12.7万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

常见异常处理方法

  1. try - except 块:这是最基本的异常处理方式,在异步函数中可以使用它来捕获各类异常。
  2. 全局异常处理:在 asyncio 应用中,可以通过设置事件循环的异常处理钩子来处理未捕获的异常。例如,使用 loop.set_exception_handler() 方法设置一个全局的异常处理函数。

捕获和处理 TimeoutError

import asyncio


async def fetch_data():
    try:
        # 模拟一个可能超时的网络请求
        await asyncio.sleep(2)
        return "Data fetched"
    except TimeoutError:
        return "Request timed out"


async def main():
    task = asyncio.create_task(fetch_data())
    try:
        result = await asyncio.wait_for(task, timeout=1)
        print(result)
    except TimeoutError:
        print("Overall operation timed out")


if __name__ == "__main__":
    asyncio.run(main())

在上述代码中,asyncio.wait_for 方法设置了任务执行的超时时间为 1 秒。如果 fetch_data 任务在 1 秒内没有完成,就会抛出 TimeoutError,在 main 函数中的 try - except 块捕获并处理该异常。同时,fetch_data 函数内部也可以捕获 TimeoutError,这取决于具体业务逻辑是否需要在函数内部处理超时情况。