Josh Rosenberg <shadowranger+pyt...@gmail.com> added the comment:

Sounds like at least one such entity's trigger attribute doesn't match the 
regex. In the spelled out loop, you'd still get the exception on a failed 
match, but you'd store the results for however many entities matched before 
then (so catching the exception and continuing on would work). List 
comprehensions are all or nothing; if an exception is raised before it 
finishes, the list in progress is thrown away.

While wasteful, this should work just fine:

    named_entities = [name_regex.match(entity.trigger).group(1) for entity in 
entities[0] if name_regex.match(entity.trigger)]

or in 3.8 with assignment expression to avoid repetitive work:

    named_entities = [match.group(1) for entity in entities[0] if match := 
name_regex.match(entity.trigger)]

The former is wasteful, but works in any Python version; the latter is directly 
equivalent to:

    named_entities = []
    for entity in entities[0]:
        match = name_regex.match(entity.trigger)
        if match:
            named_entities.append(match.group(1))

The ultimate problem is your regex isn't always matching; list comprehensions 
just change whether or no you store the partial results.

----------
nosy: +josh.r
status: pending -> open

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue36158>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to