繁体   English   中英

如何在python中捕获“拆分”异常?

[英]How do I catch "split" exceptions in python?

我正在尝试解析电子邮件地址列表以删除仅留下域名的用户名和“@”符号。

示例:blahblah@gmail.com 所需的输出:gmail.com

我使用以下代码完成了此操作:

for row in cr: 
    emailaddy = row[0]
    (emailuser, domain) = row[0].split('@')
    print domain

但我的问题是当我遇到格式不正确的电子邮件地址时。 例如,如果该行包含“aaaaaaaaa”(而不是有效的电子邮件地址),则程序会因错误而崩溃

(emailuser, domain) = row[0].split('@')
ValueError: need more than 1 value to unpack. 

(如您所料)与其检查所有电子邮件地址的有效性,我宁愿不更新抓取域并转到下一条记录。 我怎样才能正确处理这个错误并继续前进?

所以对于以下列表:

blahblah@gmail.com
mmymymy@hotmail.com
youououou
nonononon@yahoo.com

我希望输出是:

gmail.com
hotmail.com

yahoo.com

谢谢!

你想要这样的东西吗?

try:
    (emailuser, domain) = row[0].split('@')
except ValueError:
    continue

您可以过滤掉不包含@的地址。

>>> [mail.split('@')[1] for mail in mylist if '@' in mail]
['gmail.com', 'hotmail.com', 'yahoo.com']
>>>

关于什么

splitaddr = row[0].split('@')
if len(splitaddr) == 2:
    domain = splitaddr[1]
else:
    domain = ''

这甚至可以处理aaa@bbb@ccc并使其无效( '' )。

尝试这个

In [28]: b = ['blahblah@gmail.com',
 'mmymymy@hotmail.com',
 'youououou',
 'nonononon@yahoo.com']

In [29]: [x.split('@')[1] for x in b if '@' in x]
Out[29]: ['gmail.com', 'hotmail.com', 'yahoo.com']

这做你想要的:

import re

l=["blahblah@gmail.com","mmymymy@hotmail.com",
   "youououou","nonononon@yahoo.com","amy@bong@youso.com"]

for e in l:
    if '@' in e:
       l2=e.split('@')
       print l2[-1]
    else:
       print

输出:

gmail.com
hotmail.com

yahoo.com
youso.com

它处理一封电子邮件可能有多个“@”的情况,并且只使用其中的 RH。

if '@' in row[0]:
    user, domain = row[0].split('@')
    print domain

我们可以将没有“@”符号的字符串视为一个简单的用户名:

try:
    (emailuser, domain) = row[0].split('@')
    print "Email User" + emailuser
    print "Email Domain" + domain
except ValueError:
    emailuser = row[0]
    print "Email User Only" + emailuser

O/P:
Email User : abc
Email Domain : gmail.com

Email User : xyz
Email Domain : gmail.com

Email User Only : usernameonly

也许最好的解决方案是同时避免异常处理。 您可以通过使用内置函数 partition() 来做到这一点。 它类似于 split() 但在找不到分隔符时不会引发 ValueError 。
阅读更多:
https://docs.python.org/3/library/stdtypes.html#str.partition

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM