code: def _raises_bad_keys(keys, error_info="config file"):
      """
      raises value error if keys is not in the system key set.
      `error_info` is used to customise the error message.
      """
      for key in list(keys):
          if key in KEYWORDS:
              continue
          dists = {k: edit_distance(k, key) for k in KEYWORDS}
          closest = min(dists, key=dists.get)
          raise ValueError(
              'Unknown keywords in {3}: By "{0}" '
              'did you mean "{1}"?\n "{0}" is '
              "not a valid option.{2}".format(
                  key, closest, EPILOG_STRING, error_info
              )
          )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import argparse
  import os
  import textwrap
  from niftynet.engine.signal import TRAIN, INFER, EVAL
  from niftynet.utilities.util_common import look_up_operations
  from niftynet.engine.application_factory import ApplicationFactory
  from niftynet.engine.application_factory import SUPPORTED_APP
  from niftynet.io.misc_io import resolve_file_name
  from niftynet.utilities.niftynet_global_config import NiftyNetGlobalConfig
  from niftynet.utilities import NiftyNetLaunchConfig
  from niftynet.utilities.user_parameters_custom import SUPPORTED_ARG_SECTIONS
  from niftynet.utilities.user_parameters_custom import add_customised_args
  from niftynet.utilities.user_parameters_default import SUPPORTED_DEFAULT_SECTIONS
  from niftynet.utilities.user_parameters_default import add_input_data_args
  from niftynet.utilities.user_parameters_helper import has_section_in_config
  from niftynet.utilities.user_parameters_helper import standardise_section_name
  from niftynet.utilities.util_common import damerau_levenshtein_distance
  from niftynet.utilities.versioning import get_niftynet_version_string
label_desc: Use image node_id 6 for calling a global function with example usage: _raises_bad_keys(keys, error_info) without return types