SiftScience/sift-python — pull request #15 by michaelpedersen (2014-10-14 08:58:38+00:00)
Title: Never swallow exceptions

It's very bad form to swallow exceptions like this. With the return version, you'd have to handle errors like this:

```python
score = client.score(user_id)
if isinstance(score, requests.exception.RequestException):
pass # error handling
elif score.is_ok():
pass # ok handling... we can't do this first, because score might not have an is_ok method
else:
pass # what exactly is happening here?
```

This is a quickfix, allowing you to handle it like this instead:
```python
try:
score = client.score(user_id)
if score.is_ok():
pass # handle ok
else:
pass # still not sure what happens here
except requests.Timeout:
pass # hey look! error handling!
```

One could go even further, and instead of having a request.is_ok, throwing some kind of SiftApiError which is a subclass of SiftError. This would simplify error handling even further.