使用VK API批量发消息时无法捕获ApiError异常,如何处理?
解决VK API发送消息时的隐私设置错误捕获问题
你自定义的ApiError类和vk_api库实际抛出的异常不是同一个,所以根本捕获不到。正确的做法是直接使用vk_api自带的异常类:
修改步骤
- 首先导入vk_api官方的
ApiError:from vk_api.exceptions import ApiError - 在捕获异常时,指定捕获这个官方异常,还可以针对性处理错误代码902(即用户关闭私信的情况),避免盲目忽略所有API错误
修改后的完整代码
import pandas as pd import vk_api from vk_api.exceptions import ApiError # 导入官方ApiError类 dataset = pd.read_csv("userID.csv") allusers = dataset["109"][1:15] session = vk_api.VkApi(token="你的token") vk = session.get_api() def send_msg(user_id): message = "Hello!" msg = session.method("messages.send", { "user_id": user_id, "random_id": 0, "message": message }) for item in allusers: try: send_msg(item) except ApiError as e: if e.code == 902: # 仅忽略用户关闭私信的错误,继续处理下一个用户 print(f"用户{item}关闭了私信,跳过") else: # 其他API错误打印出来,方便排查问题 print(f"发送给用户{item}时出错: {e}")
这样修改后,程序遇到隐私设置错误时会跳过该用户,继续遍历后续用户;同时其他类型的API错误会被打印出来,不会直接忽略,方便你调试其他潜在问题。
内容的提问来源于stack exchange,提问作者Me_and_Michael
相关产品推荐
相关产品推荐

