diff --git a/.gitignore b/.gitignore
index 9f24571900d0b88a162bd59862d5386f0eb185f5..6934b57796728890ef329673dc75eb8ecc98a997 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,7 +68,7 @@ target/
 .pydevproject
 *.png
 *.swp
- 
+.idea/
 
 # there might be ipython notebooks
 .ipynb_checkpoints
diff --git a/postpic/datareader/datareader.py b/postpic/datareader/datareader.py
index 5dfb11980a9a45c62dcb96b8cc9d2f37861d0119..68c8b6cbd44a6743364a9897114543b5b9e4866c 100644
--- a/postpic/datareader/datareader.py
+++ b/postpic/datareader/datareader.py
@@ -220,7 +220,7 @@ class Dumpreader_ifc(with_metaclass(abc.ABCMeta, FieldAnalyzer)):
         for key in self._simgridkeys():
             try:
                 return self.gridpoints(key, axis)
-            except(KeyError):
+            except KeyError:
                 pass
         raise KeyError
 
@@ -234,7 +234,7 @@ class Dumpreader_ifc(with_metaclass(abc.ABCMeta, FieldAnalyzer)):
                 offset = self.gridoffset(key, axis)
                 n = self.gridpoints(key, axis)
                 return np.array([offset, offset + self.gridspacing(key, axis) * n])
-            except(KeyError):
+            except KeyError:
                 pass
         raise KeyError('Unable to resolve "simexent" for axis "{:}"'.format(axis))
 
diff --git a/postpic/datareader/epochsdf.py b/postpic/datareader/epochsdf.py
index 6d492fc38233c2fa1a30712b504421551b7cc944..472b9aa3b006aace13aa845d101891e0a3de5923 100644
--- a/postpic/datareader/epochsdf.py
+++ b/postpic/datareader/epochsdf.py
@@ -74,7 +74,7 @@ class Sdfreader(Dumpreader_ifc):
         import sdf
         try:
             sdfversion = sdf.__version__
-        except(AttributeError):
+        except AttributeError:
             sdfversion = '0.0.0'
         if sdfversion < '2.2.0':
             raise ImportError('Upgrade sdf package to 2.2.0 or higher.')
@@ -210,7 +210,7 @@ class Sdfreader(Dumpreader_ifc):
                    12: lambda s: self['Particles/Charge/' + s].data}
         try:
             ret = options[attribid](species)
-        except(IndexError):
+        except IndexError:
             raise KeyError('Attribute "{}" of species "{}" not found.'.format(attrib, species))
         return ret
 
diff --git a/postpic/datareader/openPMDh5.py b/postpic/datareader/openPMDh5.py
index 655b893102885371a1b6fd5c87fecd0db2f02a9b..d04c2b1c0ec7e37081a4381b483e7135aa315328 100644
--- a/postpic/datareader/openPMDh5.py
+++ b/postpic/datareader/openPMDh5.py
@@ -124,7 +124,7 @@ class OpenPMDreader(Dumpreader_ifc):
             try:
                 gs = self.gridspacing(k, None)
                 return len(gs)
-            except(KeyError):
+            except KeyError:
                 pass
         raise KeyError('number of simdimensions could not be retrieved for {}'.format(self))
 
@@ -170,7 +170,7 @@ class OpenPMDreader(Dumpreader_ifc):
             if offsetkey is not None:
                 data += self.data(offsetkey.format(species))
             ret = np.asarray(data, dtype=np.float64)
-        except(IndexError):
+        except IndexError:
             raise KeyError
         return ret
 
diff --git a/postpic/datareader/vsimhdf5.py b/postpic/datareader/vsimhdf5.py
index 6eabed331ea36b9fd16cf5110aa45c4ee58f423e..f9b7a8af9f2aed6fba0051f9b8ae407306a7a6bd 100644
--- a/postpic/datareader/vsimhdf5.py
+++ b/postpic/datareader/vsimhdf5.py
@@ -88,7 +88,7 @@ class Hdf5reader(Dumpreader_ifc):
         axis = helper.axesidentify[axis]
         try:
             return np.float64(self["ElecMultiField"][..., axis])
-        except(KeyError):
+        except KeyError:
             return None
 
     def dataB(self, axis, **kwargs):
@@ -96,7 +96,7 @@ class Hdf5reader(Dumpreader_ifc):
         axis = helper.axesidentify[axis]
         try:
             return np.float64(self["MagMultiField"][..., axis])
-        except(KeyError):
+        except KeyError:
             return None
 
     def grid(self, axis):
diff --git a/postpic/particles/_routines.py b/postpic/particles/_routines.py
index 7ce8b5d3aad3e298d57948011dd5d8c3ad55eea7..2b77f53a39561eabad4c46077c0dedc19791304a 100644
--- a/postpic/particles/_routines.py
+++ b/postpic/particles/_routines.py
@@ -88,7 +88,7 @@ def histogramdd(data, **kwargs):
         if shape[0] > 3 and len(shape) == 2:  # (N, D) array
             # data[:,i] will create a view consuming only microseconds
             data = [data[:, i] for i in range(shape[1])]
-    except(AttributeError):
+    except AttributeError:
         pass
 
     # upcast 1D if length 1 dimensions are omitted
@@ -122,7 +122,7 @@ def histogramdd(data, **kwargs):
                 if not np.isscalar(ranges[ax][i]):
                     # if value can be accessed it must be a scalar value
                     raise ValueError('range="{}" not properly formatted.'.format(kwrange))
-            except(TypeError):
+            except TypeError:
                 ranges[ax][i] = f(d)
     kwrange = ranges
 
diff --git a/postpic/particles/particles.py b/postpic/particles/particles.py
index f2565354813cbce879b8159e01ba757e8cc0a8b0..c408cbc3632bdbd9ed0de04d16f15187d869b026 100644
--- a/postpic/particles/particles.py
+++ b/postpic/particles/particles.py
@@ -79,7 +79,7 @@ class _SingleSpecies(object):
         if species not in dumpreader.listSpecies():
             # A better way would be to test if len(self) == 0,
             # but that may require heavy IO
-            raise(KeyError('species "{:}" does not exist in {:}'.format(species, dumpreader)))
+            raise KeyError('species "{:}" does not exist in {:}'.format(species, dumpreader))
         self.species = species
         self._dumpreader = dumpreader
         self.compresslog = []
@@ -136,7 +136,7 @@ class _SingleSpecies(object):
         elif key in ['mass', 'charge']:
             try:
                 ret = self._dumpreader.getSpecies(self.species, key)
-            except(KeyError):
+            except KeyError:
                 # in the special case of mass or charge try to deduce mass or charge
                 # from the species name.
                 self._idfy = identifyspecies(self.species)
@@ -277,7 +277,7 @@ class _SingleSpecies(object):
                 # len(3) will yield a TypeError, len([3]) returns 1
                 ret = len(self._readatomic(key))
                 break
-            except(TypeError, KeyError):
+            except (TypeError, KeyError):
                 pass
         return ret
 
@@ -321,7 +321,7 @@ class _SingleSpecies(object):
             for source in [np, scipy.constants]:
                 try:
                     _vars[name] = getattr(source, name)
-                except(AttributeError):
+                except AttributeError:
                     pass
             if name not in _vars:
                 raise KeyError('"{}" not found!'.format(name))
@@ -391,7 +391,7 @@ class MultiSpecies(object):
             dr0 = self._ssas[0].dumpreader
             if all([dr0 == ssa.dumpreader for ssa in self._ssas]):
                 return dr0
-        except(IndexError, KeyError):
+        except (IndexError, KeyError):
             return None
 
     def simextent(self, axis):
@@ -411,7 +411,7 @@ class MultiSpecies(object):
         '''
         try:
             ret = self._ssas[0].dumpreader.simgridpoints(axis)
-        except(AttributeError, KeyError):
+        except (AttributeError, KeyError):
             return None
 
     @property
@@ -509,7 +509,7 @@ class MultiSpecies(object):
             if ignore_missing_species:
                 try:
                     self._ssas.append(_SingleSpecies(dumpreader, species))
-                except(KeyError):
+                except KeyError:
                     pass
             else:
                 self._ssas.append(_SingleSpecies(dumpreader, species))
@@ -649,7 +649,7 @@ class MultiSpecies(object):
             return self.__call_sp(expr)
         try:
             bs = basestring  # python2
-        except(NameError):
+        except NameError:
             bs = str  # python3
         if isinstance(expr, bs):
             # create temporary ScalarProperty object