Counting ways to divide a word into palindrome blocks
Exit code

When exiting due to an error, it's good to use a non-zero exit code.
Calling exit() without an explicit value will use the default 0, meaning success.

Naming

The name number_of_block_palindrome_groupings is a bit long an tedious.
How about count_block_palindromes?

List comprehensions

Instead of accumulating a sum with a loop,
you could use a list comprehension:

return sum([1 + count_block_palindromes(string[i:-i])
            for i in range(1, len(string) // 2 + 1)
            if string[:i] == string[-i:]])


Memoization

In case of long input with recursive patterns,
the same substrings may be computed many times repeatedly.
It could be a useful optimization to cache the results of computing each unique input.
An easy way to implement that using functools.lru_cache.

import functools


@functools.lru_cache()
def count_block_palindromes(string):
    # ...


Doc tests

Doc tests are awesome. They are executable documentations serving as unit tests, for example:

def count_block_palindromes(string):
    """
    &gt;&gt;&gt; count_block_palindromes("BONBON")
    1

    &gt;&gt;&gt; count_block_palindromes("ONION")
    1

    &gt;&gt;&gt; count_block_palindromes("BBACBB")
    3

    &gt;&gt;&gt; count_block_palindromes("BABABABABABABABA")
    15

    &gt;&gt;&gt; count_block_palindromes("BABABABABABABAB")
    33

    """
    # ... the code


This is runnable in Pycharm with Control Shift R,
or in the shell with python -mdoctest yourscript.py.