[英]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.