代码生成“AttributeError”,而不是正确地提升ValueE

2024-09-29 23:16:00 发布

您现在位置:Python中文网/ 问答频道 /正文

使用regex表达式,我创建了一个必须满足某些条件(ex/不允许空白)的函数,并生成一个由特殊字符分隔的元组

输入一个“hello!世界!hola'应该产生一个元组('hello'、'world'、'hola')

如果字符串不符合我的条件,我想引发ValueError。但是,如果字符串不符合我的条件,我的代码将调用AttributeError。为什么函数不能正确调用异常

我试图调用ValueError,但函数似乎没有捕获我的异常

def produce_tupule (s):

    re_pair = re.compile(r'''^                        
                           ([a-zA-Z0-9._+-]+)
                           \!                            
                           ([a-zA-Z0-9._+-]+)
                           \!
                           ([a-zA-Z0-9._+-]+)
                           $              
                        ''',
                        re.VERBOSE)
    try:
        return (re_pair.match(s).groups())
    except ValueError as e:
        print(e)

我期望product\u tupule的输出('你好!世界!hola')导致ValueError消息,因为字符串中存在空格

但是,错误消息指向“return:(re\u pair.match(s).groups())”行并打印出AttributeError: 'NoneType' object has no attribute 'groups'

是什么导致函数无法捕获异常并生成AttributeError


Tags: 函数字符串rehello世界条件groups元组
1条回答
网友
1楼 · 发布于 2024-09-29 23:16:00

如果给定的正则表达式与您的输入不匹配,则re.match返回None而不是ValueError。然后,您的代码尝试访问None返回值的.groups成员,返回值以AttributeError失败

如果要在给定的正则表达式不匹配时引发ValueError,则必须显式地用带有显式错误检查的代码替换return (re_pair.match(s).groups())行:

match = re_pair.match(s)
if match is None:
    raise ValueError
return match.groups()

相关问题 更多 >

    热门问题