diff --git a/salt/states/pip_state.py b/salt/states/pip_state.py
index <HASH>..<HASH> 100644
--- a/salt/states/pip_state.py
+++ b/salt/states/pip_state.py
@@ -339,7 +339,7 @@ def installed(name,
         __env__=__env__
     )
 
-    if pip_install_call and (pip_install_call['retcode'] == 0):
+    if pip_install_call and (pip_install_call.get('retcode', 1) == 0):
         ret['result'] = True
 
         if requirements or editable:
@@ -375,8 +375,11 @@ def installed(name,
             ret['comment'] = 'Package was successfully installed'
     elif pip_install_call:
         ret['result'] = False
-        error = 'Error: {0} {1}'.format(pip_install_call['stdout'],
-                                        pip_install_call['stderr'])
+        if 'stdout' in pip_install_call:
+            error = 'Error: {0} {1}'.format(pip_install_call['stdout'],
+                                            pip_install_call['stderr'])
+        else:
+            error = 'Error: {0}'.format(pip_install_call['comment'])
 
         if requirements or editable:
             comments = []
Properly handle requirements files not found.

If a requirements file is not found, the `pip` salt module does not even execute the `cmd` call, so, there's not `retcode`, `stdout` or `stderr`.