SyntaxError: name capture 'RANGE' makes remaining patterns unreachable
This gives the expected results:
with open(data_file, newline="") as reader:
csvreader = csv.DictReader(reader)
for row in csvreader:
#print(row)
match row[RULE_TYPE]:
case "RANGE":
print("range")
case "MANDATORY":
print("mandatory")
case _:
print("nothing to do")
This:
RANGE = "RANGE"
MANDATORY = "MANDATORY"
with open(data_file, newline="") as reader:
csvreader = csv.DictReader(reader)
for row in csvreader:
#print(row)
match row[RULE_TYPE]:
case RANGE:
print("range")
case MANDATORY:
print("mandatory")
case _:
print("nothing to do")
Gives (and I don't understand why):
SyntaxError: name capture 'RANGE' makes remaining patterns unreachable
The bytecode compiler doesn't know that you intend RANGE
to be a constant -- it thinks it's a variable to bind a
value to.
To make this work you need to find a way to refer to the
value that isn't just a bare name. One way would be to
define your constants using an enum:
class Options(Enum):
RANGE = "RANGE"
MANDATORY = "MANDATORY"
match stuff:
case Options.RANGE:
...
case Options.MANDATORY:
...
On 8/06/23 10:18 am, Jason Friedman wrote:
SyntaxError: name capture 'RANGE' makes remaining patterns unreachable
The bytecode compiler doesn't know that you intend RANGE
to be a constant -- it thinks it's a variable to bind a
value to.
To make this work you need to find a way to refer to the
value that isn't just a bare name. One way would be to
define your constants using an enum:
class Options(Enum):
RANGE = "RANGE"
MANDATORY = "MANDATORY"
match stuff:
case Options.RANGE:
...
case Options.MANDATORY:
...
--
Greg
--
https://mail.python.org/mailman/listinfo/python-list
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 300 |
Nodes: | 16 (2 / 14) |
Uptime: | 70:40:16 |
Calls: | 6,712 |
Files: | 12,244 |
Messages: | 5,356,842 |