reportOptionalCall.md
April 8, 2026 · View on GitHub
Overview
reportOptionalCall is a diagnostic in Pylance and Pyright that warns when you attempt to call a value that could be None (e.g., maybe_func()). This helps prevent runtime errors caused by calling a function or method that might not be defined.
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.
- #79: Consider using Optional types in unions to manage None assignments more effectively.
- #9073: When using
allin a type guard context, use individual truthiness checks instead of relying onallfor conditional evaluation.
Examples
from typing import Optional, Callable
callback: Optional[Callable[[], str]] = None
result = callback() # Error: Object of type "None" is not callable
Fix — check for None before calling:
if callback is not None:
result = callback()
Common Fixes & Workarounds
- Use type guards (e.g.,
if func is not None:) before calling a possibly-optional function or method. - Add type annotations to clarify when a value can be
Noneand handle those cases explicitly. - Use assertions (e.g.,
assert func is not None) before calling if you are certain the value is notNoneat that point. - 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 calling python.analysis.diagnosticSeverityOverrides— adjust or suppress this diagnosticpython.analysis.typeCheckingMode— controls which diagnostics are enabled by default