larksuite/cli · error · ValueError

expected

Error message

expected {type_name}

What it means

This ValueError is raised by builtin_scalar_value when a value typed xsd:double or xsd:decimal fails the XSD lexical pattern for that type. decimal allows only plain decimal notation; double additionally allows scientific exponent notation. The message interpolates the offending type name.

Solutions

  1. Rewrite the value using '.' as the decimal separator and no thousands separators.
  2. For xsd:decimal, remove the exponent (convert '1.5e3' to '1500').
  3. For special values use the appropriate type or sentinel allowed by the schema instead of INF/NaN.
  4. Fix the serializer to use invariant culture / non-locale number formatting.

Example fix

// before
<scale factor="1,5e2"/>  <!-- decimal with comma+exponent -->
// after
<scale factor="150"/>
Defensive patterns

Strategy: validation

Validate before calling

import re
double_re = re.compile(r'[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?')
decimal_re = re.compile(r'[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)')
assert decimal_re.fullmatch('1.5') is not None  # no commas, no exponent for decimal

Type guard

def is_xsd_number(text, allow_exponent=False):
    import re
    base = r'[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)'
    pat = base + (r'(?:[eE][+-]?[0-9]+)?' if allow_exponent else '')
    return re.fullmatch(pat, text.strip()) is not None

Try / catch

try:
    value = scalar_value_for_type('decimal', raw)
except ValueError as e:
    print(f'fix lexical form (use "1.5" style): {e}')

Prevention

When it happens

Trigger: Calling scalar_value_for_type with type_name 'double' or 'decimal' and values like '1,5' (comma decimal separator), 'NaN', 'INF', '1e5' for decimal (exponent not allowed), '1.2.3', or whitespace-embedded numbers.

Common situations: Locale-formatting bugs exporting '1,5' instead of '1.5'; XML producers emitting INF/NaN for doubles where XSD forbids them; scientific notation used in decimal fields; empty or placeholder values.

Related errors


AI-assisted analysis of larksuite/cli@7fd6ef3c07 (2026-09-04). Data as JSON: /api/errors/b75b38cea2e84ff9. Report an issue: GitHub.

Appendix: source

Thrown at skills/lark-slides/scripts/sxsd_validator.py:506

        if value not in {"true", "false", "1", "0"}:
            raise ValueError("expected boolean")
        return value in {"true", "1"}
    if type_name in {"integer", "positiveInteger", "nonNegativeInteger"}:
        if re.fullmatch(r"[+-]?\d+", value) is None:
            raise ValueError("expected integer")
        number = Decimal(value)
        if type_name == "positiveInteger" and number <= 0:
            raise ArithmeticError("expected positive integer")
        if type_name == "nonNegativeInteger" and number < 0:
            raise ArithmeticError("expected non-negative integer")
        return number
    if type_name in {"double", "decimal"}:
        lexical_value = value.strip(" \t\n\r")
        decimal_pattern = r"[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)"
        double_pattern = decimal_pattern + r"(?:[eE][+-]?[0-9]+)?"
        expected_pattern = double_pattern if type_name == "double" else decimal_pattern
        if re.fullmatch(expected_pattern, lexical_value) is None:
            raise ValueError(f"expected {type_name}")
        try:
            number = Decimal(lexical_value)
        except InvalidOperation as error:
            raise ValueError(f"expected {type_name}") from error
        if not math.isfinite(float(number)):
            raise ValueError(f"expected finite {type_name}")
        return number
    return value


def scalar_value_for_type(
    type_name: str,
    value: str,
    model: SchemaModel,
    resolving: set[str] | None = None,
) -> Decimal | str | bool:
    resolving = resolving or set()
    if type_name in resolving:

View on GitHub (pinned to 7fd6ef3c07)