diff --git a/lib/spack/spack/error.py b/lib/spack/spack/error.py
index c94875e91a792c8aaad43e24257260830026627b..5e5c1b1c7e7ac5f3bd5318ba44246b674025bd77 100644
--- a/lib/spack/spack/error.py
+++ b/lib/spack/spack/error.py
@@ -26,6 +26,7 @@
 import sys
 import llnl.util.tty as tty
 import spack
+import inspect
 
 
 class SpackError(Exception):
@@ -49,7 +50,7 @@ def die(self):
         else:
             tty.error(self.message)
             if self.long_message:
-                print self.long_message
+                print(self.long_message)
             os._exit(1)
 
     def __str__(self):
@@ -58,6 +59,16 @@ def __str__(self):
             msg += "\n    %s" % self._long_message
         return msg
 
+    def __repr__(self):
+        args = [repr(self.message), repr(self.long_message)]
+        args = ','.join(args)
+        qualified_name = inspect.getmodule(
+            self).__name__ + '.' + type(self).__name__
+        return qualified_name + '(' + args + ')'
+
+    def __reduce__(self):
+        return type(self), (self.message, self.long_message)
+
 
 class UnsupportedPlatformError(SpackError):
     """Raised by packages when a platform is not supported"""