Python 3.x Attributeerror: 'nonetype' Object Has No Attribute 'groupdict'
Solution 1:
Regular expression functions in Python return None when the regular expression does not match the given string. So in your case, match is None, so calling match.groupdict() is trying to call a method on nothing.
You should check for match first, and then you also don’t need to catch any exception when accessing groupdict():
match = p.search('Total run time: 9h 34m 9s 901ms realtime, 7h 6m 29s 699ms uptime')
ifmatch:
d = match.groupdict()
In your particular case, the expression cannot match because at the very beginning, it is looking for a + sign. And there is not a single plus sign in your string, so the matching is bound to fail. Also, in the expression, there is no separator beween the various time values.
Try this:
>>> expr = re.compile(r"((?P<day>\d+)d)?\s*((?P<hrs>\d+)h)?\s*((?P<min>\d+)m)?\s*((?P<sec>\d+)s)?\s*(?P<ms>\d+)ms")
>>> match = expr.search('Total run time: 9h 34m 9s 901ms realtime, 7h 6m 29s 699ms uptime')
>>> match.groupdict()
{'sec': '9', 'ms': '901', 'hrs': '9', 'day': None, 'min': '34'}
Solution 2:
Here, match is evaluating to None, which is NoneType in python.
Hence, you are getting the error.
You can put a null check to avoid it, like:
try:
if !(match is None):
d = match.groupdict()
Solution 3:
As re.search can return None if it fails (see), you should check the returned result explicitly before proceeding:
ifmatch is not None:
d = match.groupdict()
Solution 4:
Here are the steps to understand the error:
'NoneType' object has no attribute 'groupdict' means you are calling the method
groupdict()on an object containing None. Looking at your code, the variablematchcontains 'None'.Where is
matchinitialised ? Just before, withre.search().Looking at the documentation for regular expression usage in python: https://docs.python.org/3.4/library/re.html#match-objects So
re.search()returns a None object, wich is completely normal if the regexp doesn't match your subject string. Then you call a method on this None object without controlling its value.
A solution among other, replace
try:
d = match.groupdict()
except IndexError:
print("exception here")
by
ifmatch is not None:
d = match.groupdict()
else:
print("re.search() returned None")
Post a Comment for "Python 3.x Attributeerror: 'nonetype' Object Has No Attribute 'groupdict'"