code: def parse_v4_unit_placement(placement_str):
      
      placement = placement_str
      container = machine = service = unit = ''
      if ':' in placement:
          try:
              container, placement = placement_str.split(':')
          except ValueError:
              msg = 'placement {} is malformed, too many parts'.format(
                  placement_str)
              raise ValueError(msg.encode('utf-8'))
      if '/' in placement:
          try:
              placement, unit = placement.split('/')
          except ValueError:
              msg = 'placement {} is malformed, too many parts'.format(
                  placement_str)
              raise ValueError(msg.encode('utf-8'))
      if placement.isdigit() or placement == 'new':
          machine = placement
      else:
          service = placement
      if (container and container not in VALID_CONTAINERS):
          msg = 'invalid container {} for placement {}'.format(
              container, placement_str)
          raise ValueError(msg.encode('utf-8'))
      unit = _parse_unit(unit, placement_str)
      return UnitPlacement(container, machine, service, unit)
docs: Return a UnitPlacement for bundles version 4, given a placement string.
  
      See https://github.com/juju/charmstore/blob/v4/docs/bundles.md
      Raise a ValueError if the placement is not valid.