<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_float(self, key: str) -> Optional[float]: """ Returns an optional configuration value, as a float, by its key, or None if it doesn't exist. If the configuration value isn't a legal float, this function will throw an error. :param str key: The requested configuration key. :return: The configuration key's value, or None if one does not exist. :rtype: Optional[float] :raises ConfigTypeError: The configuration value existed but couldn't be coerced to float. """

        v = self.get(key)
        if v is None:
            return None
        try:
            return float(v)
        except:
            raise ConfigTypeError(self.full_key(key), v, 'float')