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')
if match:
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'}
1
solved Python 3.x AttributeError: ‘NoneType’ object has no attribute ‘groupdict’