Не знаю, как правильно вызвать ошибку вместе со своим сообщением

Не знаю, как правильно вызвать ошибку вместе со своим сообщением. Еще не очень понимаю, почему следующий вызов функции не сработал, пожалуйста, помогите! Задание по которому я писал:

Написать функцию 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 шт):

Автор решения: MaxU

Попробуйте так:

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
→ Ссылка
Автор решения: user451234

можно и проще чем

re.findall(r"([^@&]+)@([\w_-][\w_\.-]*\.[\w_-]{2,})$" email_address)

вот так например

re.findall(r'(^\w+)@((\w+).(\w{2,}))$
→ Ссылка