diff --git a/yt_dlp/options.py b/yt_dlp/options.py index 900b5c8b1..995ea6a96 100644 --- a/yt_dlp/options.py +++ b/yt_dlp/options.py @@ -96,12 +96,16 @@ def parseOpts(overrideArguments=None, ignore_config_files='if_override'): opts = optparse.Values({'verbose': True, 'print_help': False}) try: - if overrideArguments: - root.append_config(overrideArguments, label='Override') - else: - root.append_config(sys.argv[1:], label='Command-line') + try: + if overrideArguments: + root.append_config(overrideArguments, label='Override') + else: + root.append_config(sys.argv[1:], label='Command-line') + loaded_all_configs = all(load_configs()) + except ValueError as err: + raise root.parser.error(err) - if all(load_configs()): + if loaded_all_configs: # If ignoreconfig is found inside the system configuration file, # the user configuration is removed if root.parse_known_args()[0].ignoreconfig: @@ -183,7 +187,7 @@ class _YoutubeDLOptionParser(optparse.OptionParser): return self.check_values(self.values, self.largs) def error(self, msg): - msg = f'{self.get_prog_name()}: error: {msg.strip()}\n' + msg = f'{self.get_prog_name()}: error: {str(msg).strip()}\n' raise optparse.OptParseError(f'{self.get_usage()}\n{msg}' if self.usage else msg) def _get_args(self, args): diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py index ea5bb3459..72223d771 100644 --- a/yt_dlp/utils.py +++ b/yt_dlp/utils.py @@ -5420,6 +5420,8 @@ class Config: # FIXME: https://github.com/ytdl-org/youtube-dl/commit/dfe5fa49aed02cf36ba9f743b11b0903554b5e56 contents = optionf.read() res = shlex.split(contents, comments=True) + except Exception as err: + raise ValueError(f'Unable to parse "{filename}": {err}') finally: optionf.close() return res