如何忽略格式错误的邮箱行以解决ValueError解包异常?
忽略格式错误邮箱行的解决方案
错误原因很明确:当处理的行里没有@符号时,split("@", maxsplit=1)只会返回1个元素,无法解包成两个变量,触发ValueError。同理,即使有@但没有:的行,后续split(":")也会报错。要忽略这些格式错误的行,最直接的方式是用try-except捕获解包异常,跳过无效行。
修改后的代码如下:
file = input("Email LIST : ") in_emails = open(file,'r',errors='ignore').read().splitlines() domain_set = set() out_emails = [] for email in in_emails: try: _, tmp = email.split("@", maxsplit=1) domain, _ = tmp.split(":", maxsplit=1) if domain not in domain_set: out_emails.append(email) domain_set.add(domain) except ValueError: # 跳过格式错误的行 continue print(out_emails)
关键修改说明
- 把原有的邮箱解析逻辑包裹在
try块中 - 捕获
ValueError异常(包含解包失败的所有情况:无@、无:等) - 遇到异常时执行
continue,直接跳过当前无效行,继续处理下一行
这样就能自动过滤掉所有格式不符合预期的邮箱行,只保留能正常解析出域名的有效条目。
内容的提问来源于stack exchange,提问作者S0o SiYa
相关产品推荐
相关产品推荐

