##### SUMMARY
If `callback_whitelist` contains a FQCN that does not exist, Ansible will crash:
```
ERROR! Unexpected Exception, this is probably a bug: 'NoneType' object has no attribute 'set_options'
the full traceback was:

Traceback (most recent call last):
  File "ansible/bin/ansible-playbook", line 123, in <module>
    exit_code = cli.run()
  File "ansible/lib/ansible/cli/playbook.py", line 127, in run
    results = pbex.run()
  File "ansible/lib/ansible/executor/playbook_executor.py", line 99, in run
    self._tqm.load_callbacks()
  File "ansible/lib/ansible/executor/task_queue_manager.py", line 165, in load_callbacks
    callback_obj.set_options()
AttributeError: 'NoneType' object has no attribute 'set_options'
```
This happens since #66128 (unsurprisingly). This is easy to fix by changing line 165 to
```
            if callback_obj is not None:
                callback_obj.set_options()
```
but this only fixes the symptom (crash), not the cause (no handling when callback not found).

I guess a better behavior would be to:
```
            if callback_obj is None:
                raise AnsibleError("Cannot find callback: %s" % callback_plugin_name)
```
or at least print a warning. Since I'm not sure what the correct behavior is, I'm creating this issue.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
lib/ansible/executor/task_queue_manager.py

##### ANSIBLE VERSION
```paste below
2.9
devel
```

if hasattr(callback_plugin, 'set_play_context'):
                callback_plugin.set_play_context(play_context)
        self.send_callback('v2_playbook_on_play_start', new_play)
        
        iterator = PlayIterator(
            inventory=self._inventory,
            play=new_play,
            play_context=play_context,
            variable_manager=self._variable_manager,
            all_vars=all_vars,
            start_at_done=self._start_at_done,
        )
        
        self._initialize_processes(min(self._forks, iterator.batch_size))
        
        strategy = strategy_loader.get(new_play.strategy, self)
        if strategy is None:
            raise AnsibleError("Invalid play strategy specified: %s" % new_play.strategy, obj=play._ds)
        
        
        
        
        for host_name in self._failed_hosts.keys():
            host = self._inventory.get_host(host_name)
            iterator.mark_host_failed(host)
        self.clear_failed_hosts()
        
        
        
        if context.CLIARGS.get('start_at_task') is not None and play_context.start_at_task is None: