From 43cad7411ded3846fccbac6b7faf16f18e1a742a Mon Sep 17 00:00:00 2001 From: Uwais Iqbal Date: Thu, 21 Sep 2017 17:35:53 +0100 Subject: [PATCH 1/2] Prevent NoneType errors with the regex matching --- pycrfsuite/_dumpparser.py | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/pycrfsuite/_dumpparser.py b/pycrfsuite/_dumpparser.py index 06e5bec..965d79a 100644 --- a/pycrfsuite/_dumpparser.py +++ b/pycrfsuite/_dumpparser.py @@ -63,26 +63,41 @@ def feed(self, line): def parse_FILEHEADER(self, line): m = re.match("(\w+): (.*)", line) - self.result.header[m.group(1)] = m.group(2) + if m: + self.result.header[m.group(1)] = m.group(2) + else: + self.result.header = None def parse_LABELS(self, line): m = re.match("(\d+): (.*)", line) - self.result.labels[m.group(2)] = m.group(1) + if m: + self.result.labels[m.group(2)] = m.group(1) + else: + self.result.labels = None def parse_ATTRIBUTES(self, line): m = re.match("(\d+): (.*)", line) - self.result.attributes[m.group(2)] = m.group(1) + if m: + self.result.attributes[m.group(2)] = m.group(1) + else: + self.result.attributes = None def parse_TRANSITIONS(self, line): m = re.match(r"\(\d+\) (.+) --> (.+): ([+-]?\d+\.\d+)", line) - from_, to_ = m.group(1), m.group(2) - assert from_ in self.result.labels - assert to_ in self.result.labels - self.result.transitions[(from_, to_)] = float(m.group(3)) + if m: + from_, to_ = m.group(1), m.group(2) + assert from_ in self.result.labels + assert to_ in self.result.labels + self.result.transitions[(from_, to_)] = float(m.group(3)) + else: + self.result.transitions = None def parse_STATE_FEATURES(self, line): m = re.match(r"\(\d+\) (.+) --> (.+): ([+-]?\d+\.\d+)", line) - attr, label = m.group(1), m.group(2) - assert attr in self.result.attributes - assert label in self.result.labels - self.result.state_features[(attr, label)] = float(m.group(3)) + if m: + attr, label = m.group(1), m.group(2) + assert attr in self.result.attributes + assert label in self.result.labels + self.result.state_features[(attr, label)] = float(m.group(3)) + else: + self.result.state_features = None From 41838c62cddbb332bd36758f83a7dbca7fd530e7 Mon Sep 17 00:00:00 2001 From: Uwais Iqbal Date: Thu, 21 Sep 2017 17:37:02 +0100 Subject: [PATCH 2/2] Update _dumpparser.py --- pycrfsuite/_dumpparser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pycrfsuite/_dumpparser.py b/pycrfsuite/_dumpparser.py index 965d79a..a207ae4 100644 --- a/pycrfsuite/_dumpparser.py +++ b/pycrfsuite/_dumpparser.py @@ -90,7 +90,7 @@ def parse_TRANSITIONS(self, line): assert to_ in self.result.labels self.result.transitions[(from_, to_)] = float(m.group(3)) else: - self.result.transitions = None + self.result.transitions = None def parse_STATE_FEATURES(self, line): m = re.match(r"\(\d+\) (.+) --> (.+): ([+-]?\d+\.\d+)", line)