code: def get_field(
      sample, field_name, allowed_types=None, allow_none=True
  ):
      """Gets the given sample field and optionally validates its type and value.
  
      Args:
          sample: a :class:`fiftyone.core.sample.Sample`
          field_name: the name of the field to get
          allowed_types (None): an optional iterable of
              :class:`fiftyone.core.labels.Label` types to enforce that the field
              value has
          allow_none (True): whether to allow the field to be None
  
      Returns:
          the field value
  
      Raises:
          ValueError if the field does not exist or does not meet the specified
          criteria
      """
      try:
          value = sample[field_name]
      except KeyError:
          raise ValueError(
              "Sample '%s' has no field '%s'" % (sample.id, field_name)
          )
  
      if not allow_none and value is None:
          raise ValueError(
              "Sample '%s' field '%s' is None" % (sample.id, field_name)
          )
  
      if allowed_types is not None:
          field_type = type(value)
          if field_type not in allowed_types:
              raise ValueError(
                  "Sample '%s' field '%s' is not a %s instance; found %s"
                  % (sample.id, field_name, allowed_types, field_type)
              )
  
      return value
  
file_path: fiftyone/fiftyone/core/validation.py
imports: import eta.core.utils
  import fiftyone.core.media
  import fiftyone.core.utils
label_desc: Use image node_id 9 for calling a global function with example usage: get_field(sample, field_name, allowed_types, allow_none) and returns: value