ScrapeGraphAI/Scrapegraph-ai · error · ValueError
Invalid operator usage.
Error message
Invalid operator usage.
What it means
ValueError from parse_expression: operator misuse detected — the expression starts or ends with & or |, or contains doubled (&&, ||) or mixed (&|, |&) operators. Only single & and | with implicit precedence are supported.
Source
Thrown at scrapegraphai/utils/parse_state_keys.py:59
+ "|".join(re.escape(key) for key in state.keys())
+ r")(\b\s*\b)("
+ "|".join(re.escape(key) for key in state.keys())
+ r")\b"
)
if re.search(pattern, expression):
raise ValueError("Adjacent state keys found without an operator between them.")
expression = expression.replace(" ", "")
if (
expression[0] in "&|"
or expression[-1] in "&|"
or "&&" in expression
or "||" in expression
or "&|" in expression
or "|&" in expression
):
raise ValueError("Invalid operator usage.")
open_parentheses = close_parentheses = 0
for i, char in enumerate(expression):
if char == "(":
open_parentheses += 1
elif char == ")":
close_parentheses += 1
if char in "&|" and i + 1 < len(expression) and expression[i + 1] in "&|":
raise ValueError(
"Invalid operator placement: operators cannot be adjacent."
)
if open_parentheses != close_parentheses:
raise ValueError("Missing or unbalanced parentheses in expression.")
def evaluate_simple_expression(exp):
for or_segment in exp.split("|"):
and_segment = or_segment.split("&")View on GitHub (pinned to 532dfffbf6)
Solutions
- Use single characters: 'a & b', 'a | b'
- Remove leading/trailing operators
- Parenthesize for grouping: '(a | b) & c'
Example fix
# before expr = 'a && b || c' # after expr = 'a & b | c'
Defensive patterns
Strategy: validation
Validate before calling
import re assert not re.match(r"^[&|]|[&|]$", expr), "leading/trailing operator" assert not re.search(r"&&|\|\||&\||\|&", expr), "double/mixed operators"
Type guard
def is_valid_operator_syntax(expr) -> bool:
return not (expr[:1] in "&|" or expr[-1:] in "&|" or "&&" in expr or "||" in expr or "&|" in expr or "|&" in expr) Try / catch
try:
keys = parse_expression(expr, state)
except ValueError as e:
fixed = expr.replace("&&", "&").replace("||", "|")
keys = parse_expression(fixed, state) Prevention
- Use single & and | only
- Translate && / || from other languages before config entry
- Lint expressions in tests
When it happens
Trigger: Expressions like '&key', 'key|', 'a && b', 'a || b', 'a &| b' passed to parse_expression.
Common situations: Copying Python/JS-style boolean syntax (&&, ||) into edge condition configs.
Related errors
- Empty expression.
- Adjacent state keys found without an operator between them.
- Invalid operator placement: operators cannot be adjacent.
- Missing or unbalanced parentheses in expression.
- No state keys matched the expression.
AI-assisted analysis of ScrapeGraphAI/Scrapegraph-ai@532dfffbf6 (2026-08-28).
Data as JSON: /api/errors/f4e687f931946f15.
Report an issue: GitHub.