2012-02-28 9 views
2

メールアドレスのリストを解析してユーザー名を削除しようとしています。ドメイン名を残すだけで「@」記号を削除しています。Pythonで「分割」例外をキャッチするにはどうすればよいですか?

例:[email protected] 所望の出力: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. 

とプログラムがクラッシュ(あなたが期待するように)のではなく、その有効性のために、すべての電子メールアドレスをご確認が含まれている場合たとえば、私はむしろだろうドメインを取得して次のレコードに移動しないでください。このエラーを適切に処理して、どうやって進めることができますか?

gmail.com 
hotmail.com 

yahoo.com 

ありがとう:私は出力になりたい

[email protected] 
[email protected] 
youououou 
[email protected] 

:のリストについては、だから、

+0

http://docs.python.org/tutorial/errors.html –

+1

電子メールの妥当性を確認する唯一の安全な方法については、アカウント所有者にメールを送信して、それを受け取った。 –

+0

いくつかの@は電子メールの仕様によって完全に細かいことに注意してください。したがって、 'rfind(" @ ")'や何かを行う方がはるかに賢明です。 – Voo

答えて

8

このようなものが必要ですか?

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

omg facepalm。ありがとう:) –

3

@が含まれていないアドレスを除外することができます。

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

についてこれでも[email protected]@cccのようなケースを処理し、('')が無効になり何

>>> [mail.split('@')[1] for mail in mylist if '@' in mail] 
['gmail.com', 'hotmail.com', 'yahoo.com'] 
>>> 
1
if '@' in row[0]: 
    user, domain = row[0].split('@') 
    print domain 
3

+0

+1 'aaa @ bbb @ ccc'の扱いです。 – RanRag

+1

値が多すぎると、ValueErrorになります。 –

2

これは、あなたが欲しいものを行います。

import re 

l=["[email protected]","[email protected]", 
    "youououou","[email protected]","[email protected]@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を取る。

関連する問題