input: Write a function to generate a Markov chain based on the given text input. The function should split the text into words and create a dictionary where each word is a key and its value is another dictionary containing the subsequent words and their frequencies. The function should then generate a new text of 100 words by randomly choosing words based on the Markov chain probabilities. If the function encounters an error during text generation, it should break the loop and return the generated text so far. 
  
  def generateMarkov(text):
    words = text.split(' ')
    markovChain = {}
  
    for i in range(len(words) - 2):
      current = words[i]
      next = words[i + 1]
      if current in markovChain:
        if next in markovChain[current]:
          markovChain[current][next] += 1
        else:
          markovChain[current][next] = 1
      else:
        markovChain[current] = {next: 1}
  
    generatedText = ""
    current = random.choice(list(markovChain))
    generatedText += current
  
    for i in range(100):
      choices = markovChain[current]
      choices = [
        key for key, value in choices.items()
        for i in range(value)
      ]
      try:
        current = random.choice(choices)
        generatedText += " " + current
      except:
        break
  
    return generatedText
  
  assert generateMarkov('Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?') != ''
  assert 'Alice' in generateMarkov('Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?')
output: import random
  
  def generateMarkov(text):
      words = text.split(' ')
      markovChain = {}
  
      for i in range(len(words) - 1):
          current = words[i]
          next = words[i + 1]
          if current in markovChain:
              if next in markovChain[current]:
                  markovChain[current][next] += 1
              else:
                  markovChain[current][next] = 1
          else:
              markovChain[current] = {next: 1}
  
      generatedText = ""
      current = random.choice(list(markovChain))
      generatedText += current
  
      for i in range(100):
          if current not in markovChain:
              break
          choices = markovChain[current]
          choices = [
              key for key, value in choices.items()
              for i in range(value)
          ]
          try:
              current = random.choice(choices)
              generatedText += " " + current
          except:
              break
  
      return generatedText