mirror of
https://github.com/Garmelon/PFERD.git
synced 2023-12-21 10:23:01 +01:00
Fix error when capturing group is None
This commit is contained in:
parent
80acc4b50d
commit
6fa9cfd4c3
@ -258,7 +258,9 @@ are available in `TARGET` for formatting.
|
|||||||
be referred to as `{g<n>}` (e. g. `{g3}`). `{g0}` refers to the original path.
|
be referred to as `{g<n>}` (e. g. `{g3}`). `{g0}` refers to the original path.
|
||||||
If capturing group *n*'s contents are a valid integer, the integer value is
|
If capturing group *n*'s contents are a valid integer, the integer value is
|
||||||
available as `{i<n>}` (e. g. `{i3}`). If capturing group *n*'s contents are a
|
available as `{i<n>}` (e. g. `{i3}`). If capturing group *n*'s contents are a
|
||||||
valid float, the float value is available as `{f<n>}` (e. g. `{f3}`).
|
valid float, the float value is available as `{f<n>}` (e. g. `{f3}`). If a
|
||||||
|
capturing group is not present (e. g. when matching the string `cd` with the
|
||||||
|
regex `(ab)?cd`), the corresponding variables are not defined.
|
||||||
|
|
||||||
Python's format string syntax has rich options for formatting its arguments. For
|
Python's format string syntax has rich options for formatting its arguments. For
|
||||||
example, to left-pad the capturing group 3 with the digit `0` to width 5, you
|
example, to left-pad the capturing group 3 with the digit `0` to width 5, you
|
||||||
|
@ -7,7 +7,7 @@ import ast
|
|||||||
import re
|
import re
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from pathlib import PurePath
|
from pathlib import PurePath
|
||||||
from typing import Dict, Optional, Union
|
from typing import Dict, Optional, Sequence, Union
|
||||||
|
|
||||||
from .logging import log
|
from .logging import log
|
||||||
from .utils import fmt_path
|
from .utils import fmt_path
|
||||||
@ -122,8 +122,14 @@ class ReRule(Rule):
|
|||||||
|
|
||||||
vars: Dict[str, Union[str, int, float]] = {}
|
vars: Dict[str, Union[str, int, float]] = {}
|
||||||
|
|
||||||
groups = [match[0]] + list(match.groups())
|
# For some reason, mypy thinks that "groups" has type List[str].
|
||||||
|
# But since elements of "match.groups()" can be None, mypy is
|
||||||
|
# wrong.
|
||||||
|
groups: Sequence[Optional[str]] = [match[0]] + list(match.groups())
|
||||||
for i, group in enumerate(groups):
|
for i, group in enumerate(groups):
|
||||||
|
if group is None:
|
||||||
|
continue
|
||||||
|
|
||||||
vars[f"g{i}"] = group
|
vars[f"g{i}"] = group
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -352,7 +358,13 @@ class Transformer:
|
|||||||
for i, (line, rule) in enumerate(self._rules):
|
for i, (line, rule) in enumerate(self._rules):
|
||||||
log.explain(f"Testing rule {i+1}: {line}")
|
log.explain(f"Testing rule {i+1}: {line}")
|
||||||
|
|
||||||
result = rule.transform(path)
|
try:
|
||||||
|
result = rule.transform(path)
|
||||||
|
except Exception as e:
|
||||||
|
log.warn(f"Error while testing rule {i+1}: {line}")
|
||||||
|
log.warn_contd(str(e))
|
||||||
|
continue
|
||||||
|
|
||||||
if isinstance(result, PurePath):
|
if isinstance(result, PurePath):
|
||||||
log.explain(f"Match found, transformed path to {fmt_path(result)}")
|
log.explain(f"Match found, transformed path to {fmt_path(result)}")
|
||||||
return result
|
return result
|
||||||
|
Loading…
Reference in New Issue
Block a user