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'}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…