Index: setup.py
===================================================================
--- setup.py	(revision 27109e5cd4b7a9b36dd9bb6e66db62057374322b)
+++ setup.py	(revision f3bf622b821c651bb6e946100b07e15cd59331fe)
@@ -53,5 +53,5 @@
     #             os.remove(file_path)
     if os.path.exists(SASVIEW_BUILD):
-        print "Removing existing build directory", SASVIEW_BUILD, "for a clean build"
+        print("Removing existing build directory", SASVIEW_BUILD, "for a clean build")
         shutil.rmtree(SASVIEW_BUILD)
 
@@ -74,5 +74,5 @@
                 enable_openmp = False
         except:
-            print "PROBLEM determining Darwin version"
+            print("PROBLEM determining Darwin version")
 
 # Options to enable OpenMP
@@ -95,5 +95,5 @@
             platform_copt = {'unix' : ['-Wno-error=unused-command-line-argument-hard-error-in-future']}
     except:
-        print "PROBLEM determining Darwin version"
+        print("PROBLEM determining Darwin version")
 
 class DisableOpenMPCommand(Command):
@@ -118,21 +118,21 @@
         # Get 64-bitness
         c = self.compiler.compiler_type
-        print "Compiling with %s (64bit=%s)" % (c, str(is_64bits))
+        print("Compiling with %s (64bit=%s)" % (c, str(is_64bits)))
 
         # OpenMP build options
         if enable_openmp:
-            if copt.has_key(c):
+            if c in copt:
                 for e in self.extensions:
                     e.extra_compile_args = copt[ c ]
-            if lopt.has_key(c):
+            if c in lopt:
                 for e in self.extensions:
                     e.extra_link_args = lopt[ c ]
 
         # Platform-specific build options
-        if platform_lopt.has_key(c):
+        if c in platform_lopt:
             for e in self.extensions:
                 e.extra_link_args = platform_lopt[ c ]
 
-        if platform_copt.has_key(c):
+        if c in platform_copt:
             for e in self.extensions:
                 e.extra_compile_args = platform_copt[ c ]
Index: src/sas/sascalc/realspace/VolumeCanvas.py
===================================================================
--- src/sas/sascalc/realspace/VolumeCanvas.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ src/sas/sascalc/realspace/VolumeCanvas.py	(revision f3bf622b821c651bb6e946100b07e15cd59331fe)
@@ -303,5 +303,5 @@
         self.shapecount += 1
 
-        #model changed, need to recalculate P(r)
+        # model changed, need to recalculate P(r)
         self._model_changed()
 
@@ -328,5 +328,5 @@
             id = "shape"+str(self.shapecount)
  
-        #shapeDesc = ShapeDescriptor(shape.lower())
+        # shapeDesc = ShapeDescriptor(shape.lower())
         if shape.lower() in shape_dict:
             shapeDesc = shape_dict[shape.lower()]()
@@ -335,5 +335,5 @@
             shapeDesc = PDBDescriptor(shape)
         else:
-            raise ValueError, "VolumeCanvas.add: Unknown shape %s" % shape
+            raise ValueError("VolumeCanvas.add: Unknown shape %s" % shape)
         
         return self.addObject(shapeDesc, id)
@@ -345,10 +345,10 @@
         """
 
-        if self.shapes.has_key(id):
+        if id in self.shapes:
             del self.shapes[id]
         else:
-            raise KeyError, "VolumeCanvas.delete: could not find shape ID"
-
-        #model changed, need to recalculate P(r)
+            raise KeyError("VolumeCanvas.delete: could not find shape ID")
+
+        # model changed, need to recalculate P(r)
         self._model_changed()
 
@@ -410,13 +410,13 @@
         if len(toks) == 1:
             try:
-                self.params.has_key(toks[0])
+                a = self.params[toks[0]]
             except KeyError:
-                raise ValueError, \
-                    "VolumeCanvas.getParam: Could not find %s" % name
+                raise ValueError("VolumeCanvas.getParam: Could not find"
+                                 " %s" % name)
 
             value = self.params[toks[0]]
             if isinstance(value, ShapeDescriptor):
-                raise ValueError, \
-                    "VolumeCanvas.getParam: Cannot get parameter value." 
+                raise ValueError("VolumeCanvas.getParam: Cannot get parameter"
+                                 " value.")
             else:
                 return value
@@ -424,22 +424,21 @@
         elif len(toks) == 2:
             try:
-                self.shapes.has_key(toks[0])
+                a = self.shapes[toks[0]]
             except KeyError:
-                raise ValueError, \
-                    "VolumeCanvas.getParam: Could not find %s" % name
+                raise ValueError("VolumeCanvas.getParam: Could not find "
+                                 "%s" % name)
 
             shapeinstance = self.shapes[toks[0]]
 
             try:
-                shapeinstance.params.has_key(toks[1])
+                a = shapeinstance.params[toks[1]]
             except KeyError:
-                raise ValueError, \
-                    "VolumeCanvas.getParam: Could not find %s" % name
+                raise ValueError("VolumeCanvas.getParam: Could not find "
+                                 "%s" % name)
 
             return shapeinstance.params[toks[1]]
 
         else:
-            raise ValueError, \
-                "VolumeCanvas.getParam: Could not find %s" % name
+            raise ValueError("VolumeCanvas.getParam: Could not find %s" % name)
             
     def getParamList(self, shapeid = None):
@@ -455,5 +454,5 @@
 
         param_list = []
-        if shapeid == None:        
+        if shapeid is None:
             for key1 in self.params.keys():
                 #value1 = self.params[key1]
@@ -468,13 +467,11 @@
         else:
             try:
-                self.shapes.has_key(shapeid)
+                a = self.shapes[shapeid]
             except KeyError:
-                raise ValueError, \
-                    "VolumeCanvas: getParamList: Could not find %s" % shapeid
+                raise ValueError("VolumeCanvas: getParamList: Could not find "
+                                 "%s" % shapeid)
+
             header = shapeid + '.'
-            param_list = self.shapes[shapeid].params.keys()  
-            for i in range(len(param_list)):
-                param_list[i] = header + param_list[i]
-
+            param_list = [header + param for param in self.shapes[shapeid].params]
         return param_list
 
Index: src/sas/sasgui/perspectives/pr/explore_dialog.py
===================================================================
--- src/sas/sasgui/perspectives/pr/explore_dialog.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
+++ src/sas/sasgui/perspectives/pr/explore_dialog.py	(revision f3bf622b821c651bb6e946100b07e15cd59331fe)
@@ -269,5 +269,5 @@
         # Note: by design, the output type should always be part of the
         #       results object.
-        if self.results.outputs.has_key(output_type):
+        if output_type in self.results.outputs:
             self.plotpanel.plot.x = self.results.d_max
             self.plotpanel.plot.y = self.results.outputs[output_type][2]
Index: src/sas/sasgui/perspectives/pr/pr.py
===================================================================
--- src/sas/sasgui/perspectives/pr/pr.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
+++ src/sas/sasgui/perspectives/pr/pr.py	(revision f3bf622b821c651bb6e946100b07e15cd59331fe)
@@ -329,5 +329,5 @@
 
         # If we have a group ID, use it
-        if pr.info.has_key("plot_group_id"):
+        if 'plot_group_id' in pr.info:
             new_plot.group_id = pr.info["plot_group_id"]
         new_plot.id = IQ_FIT_LABEL
@@ -348,5 +348,5 @@
                 except:
                     err[i] = 1.0
-                    print "Error getting error", value, x[i]
+                    print("Error getting error", value, x[i])
 
             new_plot = Data1D(x, y)
@@ -356,5 +356,5 @@
             new_plot.yaxis("\\rm{Intensity} ", "cm^{-1}")
             # If we have a group ID, use it
-            if pr.info.has_key("plot_group_id"):
+            if 'plot_group_id' in pr.info:
                 new_plot.group_id = pr.info["plot_group_id"]
             new_plot.id = IQ_SMEARED_LABEL
Index: test/sasdataloader/test/testplugings.py
===================================================================
--- test/sasdataloader/test/testplugings.py	(revision b699768550de9d4b35b087234ec1d2a461922bab)
+++ test/sasdataloader/test/testplugings.py	(revision f3bf622b821c651bb6e946100b07e15cd59331fe)
@@ -32,5 +32,5 @@
         output = self.L.load('test_data.test')
         self.assertEqual(output.x[0], 1234.)
-        self.assertTrue(self.L.loaders.has_key('.test'))
+        self.assertTrue('.test' in self.L.loaders)
         
 class testZip(unittest.TestCase):
@@ -61,5 +61,5 @@
         output = self.L.load('test_data.test')
         self.assertEqual(output.x[0], 1234.)
-        self.assertTrue(self.L.loaders.has_key('.test'))
+        self.assertTrue('.test' in self.L.loaders)
         
         
