- updated setup script
- improve behavior when opening nonexostend or ports with errors
diff --git a/pyparallel/parallel/parallelppdev.py b/pyparallel/parallel/parallelppdev.py
index 98e1e84..df9cf2d 100644
--- a/pyparallel/parallel/parallelppdev.py
+++ b/pyparallel/parallel/parallelppdev.py
@@ -183,15 +183,21 @@
             self.device = port
         else:
             self.device = "/dev/parport%d" % port
+        self._fd = None
         self._fd = os.open(self.device, os.O_RDWR)
-        #~ self.PPEXCL()
-        self.PPCLAIM()
-        self.setDataDir(1)
-        self.setData(0)
+        try:
+            self.PPEXCL()
+            self.PPCLAIM()
+            self.setDataDir(1)
+            self.setData(0)
+        except IOError:
+            os.close(self._fd)
+            self._fd = None
+            raise
 
     def __del__(self):
-        self.PPRELEASE()
         if self._fd is not None:
+            self.PPRELEASE()
             os.close(self._fd)
 
     def timevalToFloat(self, timeval):