### Summary

If a module calls `fail_json()` and provides `exception=None`, this will crash every callback that uses `_handle_exception` from `CallbackBase`: if verbosity is < 3, it will try to call `split` on `None`, and otherwise it will try to concatenate a string with `None` (which results in `TypeError`).

### Issue Type

Bug Report

### Component Name

lib/ansible/plugins/callback/__init__.py

### Ansible Version

```console
devel
```


### Configuration

```console
*
```


### OS / Environment

*

### Steps to Reproduce

*

### Expected Results

*

### Actual Results

```console
*
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
def __getitem__(self, ch):
        
        
        if (ch == 10 or
            32 <= ch <= 126 or
            ch == 133 or
            160 <= ch <= 55295 or
            57344 <= ch <= 65533 or
            65536 <= ch < 1114111)\
                and ch != 65279:
            return ch
        return None
def _filter_yaml_special(scalar):
    """Filter a string removing any character that libyaml/pyyaml declare as special"""
    return scalar.translate(_SpecialCharacterTranslator())
def _munge_data_for_lossy_yaml(scalar):
    """Modify a string so that analyze_scalar in libyaml/pyyaml will allow block formatting"""
    
    
    scalar = scalar.rstrip()
    
    scalar = scalar.expandtabs()
    
    scalar = _filter_yaml_special(scalar)
    
    return _SPACE_BREAK_RE.sub(r'\1', scalar)
def _pretty_represent_str(self, data):