On 27/08/2013 02:48, Skip Montanaro wrote:
I have code in the pylockfile package that looks roughly like this
(apologies for the indentation - I'm growing to dislike Gmail for
typing code fragments):

try:
     write_pid_to_lockfile(somefile)
except OSError as exc:
     if conditions_i_can_handle:
        do_other_stuff...
     else:
         raise LockFailed("Failed to create %s" % self.path)

Thinking I would just get the final exception (not the one I caught
originally), I was surprised to see this output on my screen:

lock.acquire()
Traceback (most recent call last):
   File "lockfile/pidlockfile.py", line 80, in acquire
     write_pid_to_pidfile(self.path)
   File "lockfile/pidlockfile.py", line 163, in write_pid_to_pidfile
     pidfile_fd = os.open(pidfile_path, open_flags, open_mode)
OSError: [Errno 13] Permission denied: '/tmp/skip/lock'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "lockfile/pidlockfile.py", line 94, in acquire
     raise LockFailed("failed to create %s" % self.path)
lockfile.LockFailed: failed to create /tmp/skip/lock

When I rung the same code with Python 2.7, I get the exception output
I anticipate:

lock.acquire()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "lockfile/pidlockfile.py", line 94, in acquire
     raise LockFailed("failed to create %s" % self.path)
LockFailed: failed to create /tmp/skip/lock

It appears exception handling changed in Python 3.  How do I suppress
the lower level OSError?

Do this:

    raise LockFailed("Failed to create %s" % self.path) from None

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to