修改邮件验证API批量处理代码以追加姓名及地址信息
解决'dict' object is not callable错误并追加用户信息到输出文件
错误原因分析
这个错误基本是以下两种情况导致的:
- 把字典对象当成函数调用了,比如写了
data('EmailAdditionalInfo')或者data['EmailAdditionalInfo'](),正确的字典取值应该用方括号[],不带括号 - 变量名和Python内置类型冲突,比如把解析后的响应命名为
dict,覆盖了内置的dict类型,后续操作就会报错
修改后的完整代码示例
假设你的原代码基于requests库,以下是调整后的版本,能正确提取姓名、地址并写入文件:
import requests # 替换成你的API密钥和文件路径 API_TOKEN = "your_actual_api_key" INPUT_EMAIL_LIST = "emails.txt" OUTPUT_VALID_FILE = "valid.txt" def validate_email_and_write(email): email = email.strip() if not email: return # 构造API请求URL api_url = f"https://api.website.net/?email={email}&token={API_TOKEN}" try: response = requests.get(api_url, timeout=10) response.raise_for_status() # 捕获HTTP请求错误 data = response.json() # 判断邮件是否有效(根据API实际返回的标识字段调整,比如is_valid) if data.get("is_valid", False): mx_record = data.get("mx_record", "") # 安全获取嵌套的附加信息字典,避免键不存在报错 additional_info = data.get("EmailAdditionalInfo", {}) # 提取子字段,用get避免KeyError firstname = additional_info.get("Firstname", "") lastname = additional_info.get("Lastname", "") address = additional_info.get("Address", "") # 写入文件,格式可以按需调整(比如用制表符/逗号分隔) output_line = f"{email}\t{mx_record}\t{firstname}\t{lastname}\t{address}\n" with open(OUTPUT_VALID_FILE, "a", encoding="utf-8") as out_file: out_file.write(output_line) except Exception as e: print(f"处理邮件 {email} 时出错: {str(e)}") # 批量处理邮件列表 if __name__ == "__main__": with open(INPUT_EMAIL_LIST, "r", encoding="utf-8") as in_file: for email_line in in_file: validate_email_and_write(email_line)
关键注意事项
- 字典取值不要加括号:比如
additional_info.get('Firstname')是正确的,不要写成additional_info('Firstname')或者additional_info['Firstname']() - 用get()方法安全取值:避免因API返回字段缺失导致的KeyError,同时可以指定默认值
- 避免变量名冲突:不要用
dict、list这类内置类型名做变量名,比如不要写dict = response.json()
内容的提问来源于stack exchange,提问作者Nicole Steven
相关产品推荐
相关产品推荐

