diff --git a/pyresult/operators.py b/pyresult/operators.py
index f8dd187..e045449 100644
--- a/pyresult/operators.py
+++ b/pyresult/operators.py
@@ -39,8 +39,11 @@ def and_then(func, res):
 
     and_then: (a -> Result b x) -> Result a x -> Result b x
     '''
-    res = result(res)
-    return result(func(res.value)) if is_ok(res) else res
+    try:
+        res = result(res)
+        return result(func(res.value)) if is_ok(res) else res
+    except Exception as e:
+        return error(str(e))
 
 
 @curry

diff --git a/tests/test_operators.py b/tests/test_operators.py
index 1f625d2..917334d 100644
--- a/tests/test_operators.py
+++ b/tests/test_operators.py
@@ -61,6 +61,13 @@ def test_and_then_is_ok():
     assert and_then(f, ok(val)) == (OK, val + 1)
 
 
+def test_and_then_catches_exception():
+    def raise_exception(val):
+        raise Exception("test")
+
+    assert and_then(raise_exception, ok(1)) == error("test")
+
+
 def test_and_then_original_res():
     val = (ERROR, 'msg')
 

Operator `and_then` should returns error if passed function raise exception
* PyResult version: 0.8.0
* Python version: ANY
* Operating System: ANY

### Description

When function in `and_then` operator raise excpetion, then `and_then` function fail with exception, instead error result.

### What I Did

```python
from pyresult import and_then, ok

def raise_exception(val):
    raise Exception()

and_then(raise_exception, ok(1))

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-46-f0756160f235> in <module>()
----> 1 and_then(raise_exception, ok(1))

/usr/local/opt/pyenv/versions/3.6.2/envs/pydecoder/lib/python3.6/site-packages/toolz/functoolz.py in __call__(self, *args, **kwargs)
    281     def __call__(self, *args, **kwargs):
    282         try:
--> 283             return self._partial(*args, **kwargs)
    284         except TypeError as exc:
    285             if self._should_curry(args, kwargs, exc):

/usr/local/opt/pyenv/versions/3.6.2/envs/pydecoder/lib/python3.6/site-packages/pyresult/operators.py in and_then(func, res)
     40     '''
     41     res = result(res)
---> 42     return result(func(res.value)) if is_ok(res) else res
     43
     44

<ipython-input-43-6bead73ba782> in raise_exception(val)
      1 def raise_exception(val):
----> 2     raise Exception()
```

Look at iodevs/pydecoder#32
tests/test_operators.py::test_and_then_catches_exception
tests/test_operators.py::test_errmap_is_ok tests/test_operators.py::test_errmap_original_res tests/test_operators.py::test_rmap_is_ok tests/test_operators.py::test_rmap_original_res tests/test_operators.py::test_and_then_is_ok tests/test_operators.py::test_and_then_original_res tests/test_operators.py::test_and_else_is_ok tests/test_operators.py::test_and_else_original_res tests/test_operators.py::test_fold_all_is_ok tests/test_operators.py::test_fold_not_all_is_ok tests/test_operators.py::test_resolve_original_res tests/test_operators.py::test_resolve_isnt_ok tests/test_operators.py::test_do_return_original_error tests/test_operators.py::test_do_return_original_result tests/test_operators.py::test_do_return_error_from_function tests/test_operators.py::test_with_default_return_original_value tests/test_operators.py::test_with_default_return_default_value_when_result_is_error