My code matches the existing behavior, which is to silently ignore the incorrect profile. See:

https://github.com/boto/boto/blob/develop/boto/provider.py#L257-L262
```python
elif config.has_option("profile %s" % profile_name, access_key_name):
    self.access_key = config.get("profile %s" % profile_name, access_key_name)
    boto.log.debug("Using access key found in config file: profile %s." % profile_name)
elif config.has_option('Credentials', access_key_name):
    self.access_key = config.get('Credentials', access_key_name)
    boto.log.debug("Using access key found in config file.")
```

I don't mind updating this logic and I think your description above is a better behavior, but realize that this will be a breaking change and it will throw an error for anybody currently misusing the profile param or env var.

Alternatively we can keep the existing behavior but have the new code ignore the default shared creds if a profile has been set, i.e. ignore the shared creds file if a profile name is set and that profile is not found in the shared creds file. Instead it will look for the profile in the boto config and then fall back to `Credentials` in the boto config.

Thoughts?