欢迎访问宙启技术站
智能推送

如何在Python中处理TimeoutError()异常

发布时间:2023-12-24 14:18:04

在Python中,可以使用try-except语句来处理TimeoutError异常。TimeoutError异常通常在网络请求等耗时操作中出现,当操作超时时会抛出该异常。

处理TimeoutError异常的一种常用方式是使用try-except语句来捕获并处理异常。以下是一个示例代码:

import requests
from requests.exceptions import Timeout

try:
    response = requests.get('https://www.example.com', timeout=5)
    print(response.text)
except TimeoutError:
    print("请求超时,请重试!")

在上述示例中,我们使用requests库发送一个GET请求到https://www.example.com,并设置timeout参数为5秒。如果请求超时,就会抛出TimeoutError异常,我们通过捕获该异常来处理超时情况,并打印提示信息。

另一种处理TimeoutError异常的方式是使用超时装饰器(timeout decorator)。这个装饰器可以用于包装函数或方法,在执行函数时设置一个最大的执行时间。

以下是一个使用timeout装饰器处理TimeoutError异常的示例代码:

import signal

class TimeoutError(Exception):
    pass

def timeout(seconds):
    def decorator(func):
        def handler(signum, frame):
            raise TimeoutError()

        def wrapper(*args, **kwargs):
            signal.signal(signal.SIGALRM, handler)
            signal.alarm(seconds)
            try:
                result = func(*args, **kwargs)
                return result
            finally:
                signal.alarm(0)

        wrapper.__name__ = func.__name__
        wrapper.__doc__ = func.__doc__
        wrapper.__dict__.update(func.__dict__)
        return wrapper
    return decorator

@timeout(5)
def long_running_function():
    # 模拟一个耗时的操作
    import time
    time.sleep(10)

try:
    long_running_function()
except TimeoutError:
    print("函数执行超时!")

在上述示例中,我们定义了一个名为timeout的装饰器函数,它接受一个超时时间(秒)作为参数。装饰器内部定义了一个handler函数,用于当超时时抛出TimeoutError异常。在wrapper函数中,我们使用signal模块设置一个定时器,当超过指定时间时,触发handler函数抛出异常。最后,我们定义了一个名为long_running_function的函数,并使用@timeout装饰器进行装饰,设置最大执行时间为5秒。如果函数执行时间超过了5秒,就会抛出TimeoutError异常,我们通过捕获该异常来处理超时情况,并打印提示信息。

以上就是处理TimeoutError异常的两种常见方式。无论是使用try-except语句还是超时装饰器,都可以根据具体的情况选择合适的方式来处理超时异常。