Не знаю, как правильно вызвать ошибку вместе со своим сообщением
Не знаю, как правильно вызвать ошибку вместе со своим сообщением. Еще не очень понимаю, почему следующий вызов функции не сработал, пожалуйста, помогите! Задание по которому я писал:
Написать функцию email_parse(<email_address>), которая при помощи регулярного выражения извлекает имя пользователя и почтовый домен из email адреса и возвращает их в виде словаря. Если адрес не валиден, выбросить исключение ValueError. Пример:
>>> email_parse('[email protected]')
{'username': 'someone', 'domain': 'geekbrains.ru'}
>>> email_parse('someone@geekbrainsru')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...
raise ValueError(msg)
ValueError: wrong email: someone@geekbrainsru
Вот мой код:
import re
list_email = []
dict_info = {}
def email_parse(email_address):
try:
if email_address != ''.join((re.findall(r"\w+[@]\w+[/.]\w+", email_address))):
raise ValueError()
except ValueError:
msg = 'wrong email {}'.format(str(email_address))
raise ValueError(msg)
else:
val_1 = re.findall(r"\w+", email_address)
val_2 = val_1[0]
val_3 = re.findall(r'@\w+[/.]\w+', email_address)
dict_info['username'] = val_2
dict_info["domain"] = ''.join(val_3)
return dict_info
print(email_parse('!!!!!f@gma'))
print(email_parse('[email protected]'))
Вот что в вышло:
Traceback (most recent call last): File "C:/Users/79309/Desktop/ПРОЕКТЫ/Август_Фавн_dz_8/project_1/main.py", line 7, in email_parse raise ValueError() ValueError
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "C:/Users/79309/Desktop/ПРОЕКТЫ/Август_Фавн_dz_8/project_1/main.py", line 22, in print(email_parse('!!!!!f@gma')) File "C:/Users/79309/Desktop/ПРОЕКТЫ/Август_Фавн_dz_8/project_1/main.py", line 11, in email_parse raise ValueError(msg) ValueError: wrong email !!!!!f@gma
Ответы (2 шт):
Попробуйте так:
def email_parse(email_address):
parsed = re.findall(r"([^@&]+)@([\w_-][\w_\.-]*\.[\w_-]{2,})$", email_address)
if not parsed:
raise ValueError(f"wrong email: {email_address}")
return dict(zip(["username", "domain"], parsed[0]))
тесты:
In [190]: email_parse("[email protected]")
Out[190]: {'username': 'someone', 'domain': 'geekbrains.ru'}
In [191]: email_parse("someone@geekbrainsru")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
...
skipped
...
ValueError: wrong email: someone@geekbrainsru
можно и проще чем
re.findall(r"([^@&]+)@([\w_-][\w_\.-]*\.[\w_-]{2,})$" email_address)
вот так например
re.findall(r'(^\w+)@((\w+).(\w{2,}))$