P A N
P A N

Reputation: 5922

Python regex AttributeError: 'NoneType' object has no attribute 'group'

I use Regex to retrieve certain content from a search box on a webpage with selenium.webDriver.

searchbox = driver.find_element_by_class_name("searchbox")
searchbox_result = re.match(r"^.*(?=(\())", searchbox).group()

The code works as long as the search box returns results that match the Regex. But if the search box replies with the string "No results" I get error:

AttributeError: 'NoneType' object has no attribute 'group'

How can I make the script handle the "No results" situation?

Upvotes: 26

Views: 162783

Answers (3)

MD SHAYON
MD SHAYON

Reputation: 8055

This error occurs due to your regular expression doesn't match your targeted value. Make sure whether you use the right form of a regular expression or use a try-catch block to prevent that error.

try:
    pattern = r"^.*(?=(\())"
    searchbox_result = re.match(pattern, searchbox).group()
except AttributeError:
    print("can't make a group")

Thank you

Upvotes: 0

P A N
P A N

Reputation: 5922

I managed to figure out this solution: omit group() for the situation where the searchbox reply is "No results" and thus doesn't match the Regex.

try:
    searchbox_result = re.match("^.*(?=(\())", searchbox).group()
except AttributeError:
    searchbox_result = re.match("^.*(?=(\())", searchbox)

Upvotes: 30

Maroun
Maroun

Reputation: 95958

When you do

re.match("^.*(?=(\())", search_result.text)

then if no match was found, None will be returned:

Return None if the string does not match the pattern; note that this is different from a zero-length match.

You should check that you got a result before you apply group on it:

res = re.match("^.*(?=(\())", search_result.text)
if res:
    # ...

Upvotes: 14

Related Questions