reportOptionalOperand.md
April 8, 2026 · View on GitHub
Overview
reportOptionalOperand is a diagnostic in Pylance and Pyright that warns when you use a value that could be None as an operand in a binary or unary operation (e.g., a + b where a or b might be None). This helps prevent runtime errors caused by performing operations on optional values.
Representative Issues
- #4163: Ensure consistency in the use of type stubs between Pyright's CLI and Pylance settings, especially with
useLibraryCodeForTypes. - #5200: Provide a configuration setting to allow users to customize diagnostic rule severities based on the type checking mode.
- #715: Prefer
typing.Dictsyntax for compatibility with generic types. - #10013: Explicitly declare attribute types at assignment to help type checkers recognize variable types.
- #3919: Use specific type annotations and correct tuple types to avoid type narrowing errors.
- #6687: Clarify that
reportOptionalOperandonly suppresses errors for the left-hand side of a binary operator. - #79: Consider using Optional types in unions to manage None assignments more effectively.
Examples
from typing import Optional
def add_values(a: Optional[int], b: int) -> int:
return a + b # Error: Operator "+" not supported for "None"
Fix — check for None before using in operations:
def add_values(a: Optional[int], b: int) -> int:
if a is not None:
return a + b
return b
Fix — use a default value:
def add_values(a: Optional[int], b: int) -> int:
return (a or 0) + b
Common Fixes & Workarounds
- Use type guards (e.g.,
if a is not None and b is not None:) before performing operations on possibly-optional values. - Use default values (e.g.,
(a or 0) + (b or 0)) to ensure operands are neverNone. - Add type annotations to clarify when a value can be
Noneand handle those cases explicitly. - Adjust the diagnostic severity or disable the rule in your settings if needed. See the Pyright configuration documentation.
See Also
- How to Use Type Narrowing to Fix Type Errors — check for
Nonebefore using in operations python.analysis.diagnosticSeverityOverrides— adjust or suppress this diagnosticpython.analysis.typeCheckingMode— controls which diagnostics are enabled by default