猿问

安全解包空元组数组

import re; print(re.findall("(.*) (.*)", "john smith"))输出[("john", "smith")],可以像[(first_name, last_name)] = re.findall(...). 但是,在不匹配(findall返回[])的情况下,此解包会引发ValueError: not enough values to unpack (expected 1, got 0).

安全解包这个元组数组的正确方法是什么,它可以在匹配 ( [("john", "smith")]) 和非匹配 ( []) 场景中工作?


有只小跳蛙
浏览 172回答 3
3回答

DIEA

一般的答案是在跳之前先看看:if result:    [(first_name, last_name)] = result或请求原谅:try:    [(first_name, last_name)] = resultexcept ValueError:    pass但是您实际上通过使用re.findall()来查找单个结果使事情变得过于复杂。使用re.seach()并提取您的匹配组:match = re.search("(.*) (.*)", value)if match:    firstname, lastname = match.groups()或者try:    firstname, lastname = re.search("(.*) (.*)", value).groups()except AttributeError:    # An attribute error is raised when `re.search()` returned None    pass

凤凰求蛊

一般的答案是在跳之前先看看:if result:    [(first_name, last_name)] = result或请求原谅:try:    [(first_name, last_name)] = resultexcept ValueError:    pass但是您实际上通过使用re.findall()来查找单个结果使事情变得过于复杂。使用re.seach()并提取您的匹配组:match = re.search("(.*) (.*)", value)if match:    firstname, lastname = match.groups()或者try:    firstname, lastname = re.search("(.*) (.*)", value).groups()except AttributeError:    # An attribute error is raised when `re.search()` returned None    pass

收到一只叮咚

由于re.findall回报不匹配的情况下,空列表,你可以使用or运营商默认值分配给first_name和last_name替代:[(first_name, last_name)] = re.findall("(.*) (.*)", "johnsmith") or [(None, None)]
随时随地看视频慕课网APP

相关分类

Python
我要回答