<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def FindFileContainingSymbol(self, symbol):
 """Gets the FileDescriptor for the file containing the specified symbol. Args: symbol: The name of the symbol to search for. Returns: A FileDescriptor that contains the specified symbol. Raises: KeyError: if the file cannot be found in the pool. """


    symbol = _NormalizeFullyQualifiedName(symbol)
    try:
      return self._descriptors[symbol].file
    except KeyError:
      pass

    try:
      return self._enum_descriptors[symbol].file
    except KeyError:
      pass

    try:
      return self._FindFileContainingSymbolInDb(symbol)
    except KeyError:
      pass

    try:
      return self._file_desc_by_toplevel_extension[symbol]
    except KeyError:
      pass

    # Try nested extensions inside a message.
    message_name, _, extension_name = symbol.rpartition('.')
    try:
      message = self.FindMessageTypeByName(message_name)
      assert message.extensions_by_name[extension_name]
      return message.file

    except KeyError:
      raise KeyError('Cannot find a file containing %s' % symbol)