This will result in a `KeyError` if an invalid `environment_string` is provided. Additionally, I'd get rid of the different exception types and use a single `EnvironmentError` with appropriate error messages. What about this code?

```python
env = self.environments.get(environment_string)
if env is None:
    raise EnvironmentError('Environment "%s" is invalid' % environment_string)
if not env.is_installed():
    raise EnvironmentError('Environment "%s" is not installed' % environment_string)
return env
```