<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def subscribe(self, field_names):
 """ Subscribe to given fields. Special fields cannot be subscribed to and will be checked on every iteration. These include: * loco name * coordinates * fuel level * gradient * current heading * is in tunnel * time You can of course still receive notifications when those change. It is important to understand that when the loco changes the set of possible controllers will likely change too. Any missing field changes will stop triggering notifications. :param field_names: list :raises ValueError if field is not present on current loco """

        available_controls = dict(self.raildriver.get_controller_list()).values()
        for field in field_names:
            if field not in available_controls:
                raise ValueError('Cannot subscribe to a missing controller {}'.format(field))
        self.subscribed_fields = field_names