当AssertionError出现时,如何引发ValueError?

时间:2018-02-08 21:11:53

标签: python regex attributeerror valueerror

我正在研究正则表达式,而我正在尝试在找不到字符串时引发ValueError。以下是我想要做的一些示例代码。

def parse_email (s):
    import re
    re_names = re.compile ('''^regex code for pattern matching''',re.VERBOSE)

    if not re_names.match(s).group('uid'): raise ValueError

    uid = re_names.match(s).group('uid')
    domain = re_names.match(s).group('domain')
    tup = uid, domain
    return tup

parse_email('e l@gmail.com') 

我希望parse_email('e l@gmail.com')函数返回ValueError而不是我得到AssertionError。提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您遇到的问题是,如果没有成功匹配,程序将无法访问您的raise ValueError语句。相反,您可能会检查是否有任何匹配,如果没有,则提出您想要的错误:

import re

def parse_email(s):
    re_names = re.compile ('''^
                           (?P<uid>[\w]+)
                           @
                           (?P<domain>[\w.-]+)?
                           $
                           ''',
                           re.VERBOSE)

    if not re_names.match(s):
        raise ValueError
    uid = re_names.match(s).group('uid')
    domain = re_names.match(s).group('domain')
    tup = uid, domain
    return tup

答案 1 :(得分:0)

以下是我最终解决问题的方法。

import re

def parse_email(s):
    re_names = re.compile ('''regex stuff
                       ''',
                       re.VERBOSE)

    try:
        uid = re_names.match(s).group('uid')
        domain = re_names.match(s).group('domain')
        tup = uid, domain
        return tup
    except AssertionError:
        raise ValueError