对于 Python 中设置超时跳过或超时退出,主要分为以下两个步骤:
- 设置超时时间
可以使用第三方库 requests
中的 timeout
参数,或标准库中的 signal
模块来设置超时时间。
- 使用
requests
库设置超时时间:
import requests
try:
response = requests.get(url, timeout=5)
# 处理正常响应
except requests.exceptions.Timeout:
# 超时异常处理
except requests.exceptions.RequestException as e:
# 其他异常处理
在以上代码中,timeout=5
设置了请求超时时间为 5 秒,如果超过该时间还未得到响应,则会抛出 requests.exceptions.Timeout
异常。
- 使用
signal
模块设置超时时间:
import signal
class TimeoutError(Exception):
pass
def timeout_handler(signum, frame):
raise TimeoutError()
signal.signal(signal.SIGALRM, timeout_handler)
try:
signal.alarm(5) # 设置超时时间为 5 秒
# 执行需要设置超时的代码块
signal.alarm(0) # 取消超时限制
except TimeoutError:
# 超时异常处理
except Exception as e:
# 其他异常处理
在以上代码中,第一步定义了一个 TimeoutError
异常类和一个 timeout_handler()
函数。在使用超时限制的代码块前后,分别调用 signal.alarm(5)
和 signal.alarm(0)
来设置和取消超时限制。如果在超时时间内代码块未执行完毕,则会抛出 TimeoutError
异常。
- 处理超时异常
在超时时间到达后,Python 会抛出对应的超时异常,需要在代码中进行处理。
- 使用
requests
库的超时异常处理:
try:
response = requests.get(url, timeout=5)
# 处理正常响应
except requests.exceptions.Timeout:
# 超时异常处理
当 requests.get()
函数调用超时后,Python 会抛出 requests.exceptions.Timeout
异常,可以在 try
块中捕获该异常并进行相应处理。
- 使用
signal
模块的超时异常处理:
class TimeoutError(Exception):
pass
def timeout_handler(signum, frame):
raise TimeoutError()
signal.signal(signal.SIGALRM, timeout_handler)
try:
signal.alarm(5) # 设置超时时间为 5 秒
# 执行需要设置超时的代码块
signal.alarm(0) # 取消超时限制
except TimeoutError:
# 超时异常处理
当超时时间到达,Python 会抛出定义的 TimeoutError
异常,可以在 try
块中捕获该异常并进行相应处理。
示例1:使用 requests 库进行超时限制
import requests
try:
response = requests.get("https://www.baidu.com", timeout=1)
print(response.status_code)
except requests.exceptions.Timeout:
print("请求超时")
except requests.exceptions.RequestException as e:
print("其他异常:", e)
在以上代码中,设置了请求的超时时间为 1 秒,如果请求时间超过 1 秒,则会抛出 requests.exceptions.Timeout
异常,并输出 "请求超时"。
示例2:使用 signal 模块进行超时限制
import signal
class TimeoutError(Exception):
pass
def timeout_handler(signum, frame):
raise TimeoutError()
signal.signal(signal.SIGALRM, timeout_handler)
try:
signal.alarm(1) # 设置超时时间为 1 秒
for i in range(10000000): # 模拟需要 2 秒才能执行完的代码
pass
signal.alarm(0) # 取消超时限制
print("程序执行完毕")
except TimeoutError:
print("程序超时")
except Exception as e:
print("其他异常:", e)
在以上代码中,设置了超时时间为 1 秒,但是进行了一个需要 2 秒才能执行完的循环。当超时时间到达后,程序会抛出定义的 TimeoutError
异常,并输出 "程序超时"。如果代码块执行完毕,则会输出 "程序执行完毕"。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中设置超时跳过,超时退出的方式 - Python技术站