处理python的异常,以及requests请求异常。在需要的函数名前面使用装饰器语法@try_except_code调用 捕获requests异常时,需要在使用地方的响应后面加一句response.raise_for_status()来检查响应的状态码,如果状态码表明请求失败,则抛出一个HTTPError异常,然后就可以用此函数捕获异常。如果状态码表明请求成功,则什么也不会发生,函数会直接返回
(function)
| 8 | |
| 9 | |
| 10 | def try_except_code(function): |
| 11 | """处理python的异常,以及requests请求异常。在需要的函数名前面使用装饰器语法@try_except_code调用 |
| 12 | 捕获requests异常时,需要在使用地方的响应后面加一句response.raise_for_status()来检查响应的状态码,如果状态码表明请求失败,则抛出一个HTTPError异常,然后就可以用此函数捕获异常。如果状态码表明请求成功,则什么也不会发生,函数会直接返回 |
| 13 | """ |
| 14 | |
| 15 | def wrapper(*args, **kwargs): |
| 16 | try: |
| 17 | result = function(*args, **kwargs) |
| 18 | except Exception as e: |
| 19 | # 获取异常信息 |
| 20 | exc_type, exc_obj, exc_tb = sys.exc_info() |
| 21 | # 获取文件名和行号 |
| 22 | file_name = traceback.extract_tb(exc_tb)[-1][0] |
| 23 | line_number = traceback.extract_tb(exc_tb)[-1][1] |
| 24 | # 输出错误信息 |
| 25 | print("出错文件:", file_name) |
| 26 | print("出错位置:", line_number, '行') |
| 27 | print("出错类型:", exc_type.__name__) |
| 28 | print("错误信息:", str(e)) |
| 29 | result = None |
| 30 | except requests.exceptions.RequestException: |
| 31 | # 处理 requests 异常 |
| 32 | exc_type, exc_obj, exc_tb = sys.exc_info() |
| 33 | # 获取文件名和行号 |
| 34 | file_name = traceback.extract_tb(exc_tb)[-1][0] |
| 35 | line_number = traceback.extract_tb(exc_tb)[-1][1] |
| 36 | # 输出错误信息 |
| 37 | print("出错文件:", file_name) |
| 38 | print("出错位置:", line_number, '行') |
| 39 | print("出错类型:", exc_type.__name__) |
| 40 | print("错误信息:", str(exc_obj)) |
| 41 | result = None |
| 42 | except requests.exceptions.HTTPError as e: |
| 43 | # 处理 HTTP 异常 |
| 44 | exc_type, exc_obj, exc_tb = sys.exc_info() |
| 45 | # 获取文件名和行号 |
| 46 | file_name = traceback.extract_tb(exc_tb)[-1][0] |
| 47 | line_number = traceback.extract_tb(exc_tb)[-1][1] |
| 48 | # 输出错误信息 |
| 49 | print("出错文件:", file_name) |
| 50 | print("出错位置:", line_number, '行') |
| 51 | print("出错类型:", exc_type.__name__) |
| 52 | print("错误信息:", str(e)) |
| 53 | result = None |
| 54 | return result |
| 55 | |
| 56 | return wrapper |
| 57 | |
| 58 | |
| 59 | @try_except_code |
nothing calls this directly
no outgoing calls
no test coverage detected