【问题标题】:How to raise ValueError when AssertionError is present python?当 AssertionError 存在 python 时如何引发 ValueError?
【发布时间】:2018-07-19 13:49:33
【问题描述】:

我正在研究正则表达式,当找不到字符串时,我试图引发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。提前感谢您的帮助!

【问题讨论】:

  • 看起来您在发布时丢失了所有缩进。此外,您描述了您希望您的功能做什么,但从未问过问题。如果您是新手,可以参考How To Ask,帮助您写出好问题。
  • 感谢您的建议,我认为问题现在措辞正确,并且缩进已修复。
  • AssertionError 异常只能来自断言语句。您向我们展示的代码中没有断言语句,因此问题出在其他地方。发布完整的异常回溯通常很有帮助。
  • 我可能会收回我之前的评论。 this 可能是你的问题吗?

标签: python regex attributeerror valueerror


【解决方案1】:

这就是我最终解决问题的方法。

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

【讨论】:

    【解决方案2】:

    您遇到的问题是,当没有成功匹配时,程序不会到达您的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
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 2011-09-10
      • 2014-08-09
      相关资源
      最近更新 更多