Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve error message in LightningCLI if subcommand is not the first argument #19715

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 7 additions & 2 deletions src/lightning/pytorch/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ def __init__(

main_kwargs, subparser_kwargs = self._setup_parser_kwargs(self.parser_kwargs)
self.setup_parser(run, main_kwargs, subparser_kwargs)
self.parse_arguments(self.parser, args)
self.parse_arguments(self.parser, args, run)

self.subcommand = self.config["subcommand"] if run else None

Expand Down Expand Up @@ -520,14 +520,19 @@ def link_optimizers_and_lr_schedulers(parser: LightningArgumentParser) -> None:
add_class_path = _add_class_path_generator(class_type)
parser.link_arguments(key, link_to, compute_fn=add_class_path)

def parse_arguments(self, parser: LightningArgumentParser, args: ArgsType) -> None:
def parse_arguments(self, parser: LightningArgumentParser, args: ArgsType, run: bool) -> None:
"""Parses command line arguments and stores it in ``self.config``."""
if args is not None and len(sys.argv) > 1:
rank_zero_warn(
"LightningCLI's args parameter is intended to run from within Python like if it were from the command "
"line. To prevent mistakes it is not recommended to provide both args and command line arguments, got: "
f"sys.argv[1:]={sys.argv[1:]}, args={args}."
)
if args is None and run and len(sys.argv) > 1 and sys.argv[1] not in self.subcommands():
raise ValueError(
"When `LightningCLI(run=True)` is used (default), you need to provide a subcommand as the first"
f" argument. For example: `python {sys.argv[0]} fit ...`"
)
if isinstance(args, (dict, Namespace)):
self.config = parser.parse_object(args)
else:
Expand Down