Repository: OpenMined/PySyft

Issue:
Cosmetic space to add for TensorsNotCollocatedException
**Describe the bug**
Cosmetic spacing, just 1, missing for TensorsNotCollocatedException

**To Reproduce**
1. initiate two tensors, one send to remote worker, one locate
2. add two tensors
2. get TensorsNotCollocatedException

```
bob = sy.VirtualWorker(hook, id="bob")
x = torch.tensor([1,2,3,4,5]).send(bob)
y = torch.tensor([1,1,1,1,1])
z = x+y
```

**Expected behavior**
" involving two tensors where one tensor is actually locatedon another machine (is a PointerTensor). Call .get() on the PointerTensor or .send("

becomes 
" involving two tensors where one tensor is actually located on another machine (is a PointerTensor). Call .get() on the PointerTensor or .send("

`locatedon` becomes `located on`


**Screenshots**
[screenshot of error message](https://github.com/theoptips/udacity_project_submission/blob/master/Screen%20Shot%202019-06-28%20at%202.50.34%20PM.png)



[exception.py with proposed change](https://github.com/theoptips/PySyft/blob/dev/syft/exceptions.py)
[commit message with proposed change explained](https://github.com/theoptips/PySyft/commit/533da84afa6ac4071a58754e97c21ce1ca7056aa)
[exception.py changed line highlighted](https://github.com/theoptips/PySyft/commit/4b68c3c6fbe0c18cdf87dfe6ddc3c2071a71f1cc)


Discussion:
Hey @theoptips,

Thanks for reporting this issue! Feel free to make a PR to fix it if you want to :)!
[WORKING on this issue] 

Thank you for the opportunity!! As this is a good-first-issue, I would love to take a stab. I am in need of a contribution. 

Is it okay if I reach out in Slack to ask questions? 

I may need help with test case set up and passing TravisCI, but I noticed the test case only tests for the exception TensorsNotCollocatedException  not the message, I should be okay, I think?

Resolving patch:
diff --git a/syft/exceptions.py b/syft/exceptions.py
--- a/syft/exceptions.py
+++ b/syft/exceptions.py
@@ -86,8 +86,8 @@ def __init__(self, tensor_a, tensor_b, attr="a method"):
             message = (
                 "You tried to call "
                 + attr
-                + " involving two tensors which "
-                + "are not on the same machine! One tensor is on "
+                + " involving two tensors which"
+                + " are not on the same machine! One tensor is on "
                 + str(tensor_a.location)
                 + " while the other is on "
                 + str(tensor_b.location)
@@ -98,7 +98,7 @@ def __init__(self, tensor_a, tensor_b, attr="a method"):
                 "You tried to call "
                 + attr
                 + " involving two tensors where one tensor is actually located"
-                + "on another machine (is a PointerTensor). Call .get() on the PointerTensor or .send("
+                + " on another machine (is a PointerTensor). Call .get() on the PointerTensor or .send("
                 + str(tensor_a.location.id)
                 + ") on the other tensor.\n"
                 + "\nTensor A: "
@@ -111,7 +111,7 @@ def __init__(self, tensor_a, tensor_b, attr="a method"):
                 "You tried to call "
                 + attr
                 + " involving two tensors where one tensor is actually located"
-                + "on another machine (is a PointerTensor). Call .get() on the PointerTensor or .send("
+                + " on another machine (is a PointerTensor). Call .get() on the PointerTensor or .send("
                 + str(tensor_b.location.id)
                 + ") on the other tensor.\n"
                 + "\nTensor A: "


Test patch: