On Tue, 14 Jun 2005 10:09:30 +0100, "Richard Lewis" <[EMAIL PROTECTED]> said: > Hi there, > > Is it possible to have an 'except' case which passes control back to the > point after the exception occurred? > > e.g. > > # a function to open the file > # raises FileLockedException is file contains 'locked' information > def open_file(file_name): > f = file(file_name, 'r') > {read first line for file lock info} > if first_line == "FILE LOCKED": > raise FileLockedException(lock_user, lock_timestamp) > {read remainder of file} > return True > > # elsewhere in a user interface module > def open_command(): > try: > open_file("foo.bar") > except FileLockException, X: > ans = tkMessageBox.askyesno(title="File Locked", message="File > locked by '" + X.user + "' on " + X.time_stamp + "\nContinue > anyway?") > if ans == tkMessageBox.YES: > # return control to the remainder of the open_file function. > How? > else: > return False > Thanks for your suggestions.
I've gone with the passing an 'ignore_lock' option to the open_file function: def open_file(self, ignore_lock=False): "Retrieves content file from FTP server and parses it into local DOM tree." ftp = ftplib.FTP(self.host) ftp.login(self.login, self.passwd) content_file = file(self.local_content_file_name, 'w+b') ftp.retrbinary("RETR " + self.path, content_file.write) ftp.quit() content_file.close() self.document = parse(self.local_content_file_name) root = self.document.documentElement if not(ignore_lock) and root.getAttribute("locked") == "1": raise ContentLocked(root.getAttribute("user"), root.getAttribute("time-stamp")) self.set_file_lock() self.opened = True return True #..... elsewhere ..... def open_command(self): "Command to handle 'open' actions." try: self.site.load_from_server('user','host.name','login','passwd','path/to/content.xml', False) except ContentLocked, e: ans = QMessageBox.question("Content Locked", "The content file is locked!\n\nIt seems that the user '" + e.user + "' is already working on the website. They left the time stamp:\n" + e.time_stamp + "\n\nChoose 'Yes' to carry on working on the website and risk losing another user's changes, or 'No' to quit.", "Yes", "No", "Cancel") if ans == "Yes": self.site.load_from_server('user','host.name','login','passwd','path/to/content.xml', True) else: qApp.quit() except Exception, e: #... I don't know why I put return False in my original open_command function, it was supposed to be a quit call. This solution allows me to keep my exception mechanism (which passes the lock information [user and timestamp] out of the open_file function) because it is dependent on ignore_lock being false. Cheers, Richard -- http://mail.python.org/mailman/listinfo/python-list