面试题答案
一键面试常见异常处理方法
- try - except 块:这是最基本的异常处理方式,在异步函数中可以使用它来捕获各类异常。
- 全局异常处理:在 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
,这取决于具体业务逻辑是否需要在函数内部处理超时情况。