diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py
index dfa77fd..f16db19 100644
--- a/Lib/bsddb/__init__.py
+++ b/Lib/bsddb/__init__.py
@@ -199,7 +199,7 @@
 
     def _checkOpen(self):
         if self.db is None:
-            raise error, "BSDDB object has already been closed"
+            raise error("BSDDB object has already been closed")
 
     def isOpen(self):
         return self.db is not None
@@ -483,7 +483,7 @@
         if cachesize >= 20480:
             e.set_cachesize(0, cachesize)
         else:
-            raise error, "cachesize must be >= 20480"
+            raise error("cachesize must be >= 20480")
     e.set_lk_detect(db.DB_LOCK_DEFAULT)
     e.open('.', db.DB_PRIVATE | db.DB_CREATE | db.DB_THREAD | db.DB_INIT_LOCK | db.DB_INIT_MPOOL)
     return e
@@ -505,7 +505,7 @@
         if file is not None and os.path.isfile(file):
             os.unlink(file)
     else:
-        raise error, "flags should be one of 'r', 'w', 'c' or 'n', not "+repr(flag)
+        raise error("flags should be one of 'r', 'w', 'c' or 'n', not "+repr(flag))
     return flags | db.DB_THREAD
 
 #----------------------------------------------------------------------
diff --git a/Lib/bsddb/db.py b/Lib/bsddb/db.py
index 3bd0c8b..bd62e2b 100644
--- a/Lib/bsddb/db.py
+++ b/Lib/bsddb/db.py
@@ -48,4 +48,4 @@
     from _bsddb import __version__
 
 if version() < (3, 2, 0):
-    raise ImportError, "correct BerkeleyDB symbols not found.  Perhaps python was statically linked with an older version?"
+    raise ImportError("correct BerkeleyDB symbols not found.  Perhaps python was statically linked with an older version?")
diff --git a/Lib/bsddb/dbrecio.py b/Lib/bsddb/dbrecio.py
index cb2725c..949a3a2 100644
--- a/Lib/bsddb/dbrecio.py
+++ b/Lib/bsddb/dbrecio.py
@@ -46,12 +46,12 @@
 
     def isatty(self):
         if self.closed:
-            raise ValueError, "I/O operation on closed file"
+            raise ValueError("I/O operation on closed file")
         return 0
 
     def seek(self, pos, mode = 0):
         if self.closed:
-            raise ValueError, "I/O operation on closed file"
+            raise ValueError("I/O operation on closed file")
         if mode == 1:
             pos = pos + self.pos
         elif mode == 2:
@@ -60,12 +60,12 @@
 
     def tell(self):
         if self.closed:
-            raise ValueError, "I/O operation on closed file"
+            raise ValueError("I/O operation on closed file")
         return self.pos
 
     def read(self, n = -1):
         if self.closed:
-            raise ValueError, "I/O operation on closed file"
+            raise ValueError("I/O operation on closed file")
         if n < 0:
             newpos = self.len
         else:
@@ -111,7 +111,7 @@
 
     def truncate(self, size=None):
         if self.closed:
-            raise ValueError, "I/O operation on closed file"
+            raise ValueError("I/O operation on closed file")
         if size is None:
             size = self.pos
         elif size < 0:
@@ -123,7 +123,7 @@
 
     def write(self, s):
         if self.closed:
-            raise ValueError, "I/O operation on closed file"
+            raise ValueError("I/O operation on closed file")
         if not s: return
         if self.pos > self.len:
             self.buflist.append('\0'*(self.pos - self.len))
@@ -137,7 +137,7 @@
 
     def flush(self):
         if self.closed:
-            raise ValueError, "I/O operation on closed file"
+            raise ValueError("I/O operation on closed file")
 
 
 """
diff --git a/Lib/bsddb/dbshelve.py b/Lib/bsddb/dbshelve.py
index 1f7fdc1..2959f25 100644
--- a/Lib/bsddb/dbshelve.py
+++ b/Lib/bsddb/dbshelve.py
@@ -69,7 +69,7 @@
         elif sflag == 'n':
             flags = db.DB_TRUNCATE | db.DB_CREATE
         else:
-            raise db.DBError, "flags should be one of 'r', 'w', 'c' or 'n' or use the bsddb.db.DB_* flags"
+            raise db.DBError("flags should be one of 'r', 'w', 'c' or 'n' or use the bsddb.db.DB_* flags")
 
     d = DBShelf(dbenv)
     d.open(filename, dbname, filetype, flags, mode)
@@ -155,7 +155,7 @@
         if self.get_type() != db.DB_RECNO:
             self.append = self.__append
             return self.append(value, txn=txn)
-        raise db.DBError, "append() only supported when dbshelve opened with filetype=dbshelve.db.DB_RECNO"
+        raise db.DBError("append() only supported when dbshelve opened with filetype=dbshelve.db.DB_RECNO")
 
 
     def associate(self, secondaryDB, callback, flags=0):
diff --git a/Lib/bsddb/dbtables.py b/Lib/bsddb/dbtables.py
index c1628ab..cc8ba77 100644
--- a/Lib/bsddb/dbtables.py
+++ b/Lib/bsddb/dbtables.py
@@ -244,7 +244,7 @@
 
             columnlist_key = _columns_key(table)
             if self.db.has_key(columnlist_key):
-                raise TableAlreadyExists, "table already exists"
+                raise TableAlreadyExists("table already exists")
 
             txn = self.env.txn_begin()
             # store the table's column info
@@ -261,7 +261,7 @@
             txn.commit()
             txn = None
         except DBError as dberror:
-            raise TableDBError, dberror.args[1]
+            raise TableDBError(dberror.args[1])
         finally:
             if txn:
                 txn.abort()
@@ -273,7 +273,7 @@
         """
         assert isinstance(table, str)
         if contains_metastrings(table):
-            raise ValueError, "bad table name: contains reserved metastrings"
+            raise ValueError("bad table name: contains reserved metastrings")
 
         columnlist_key = _columns_key(table)
         if not self.db.has_key(columnlist_key):
@@ -340,7 +340,7 @@
 
                 self.__load_column_info(table)
             except DBError as dberror:
-                raise TableDBError, dberror.args[1]
+                raise TableDBError(dberror.args[1])
             finally:
                 if txn:
                     txn.abort()
@@ -352,9 +352,9 @@
         try:
             tcolpickles = self.db.get(_columns_key(table))
         except DBNotFoundError:
-            raise TableDBError, "unknown table: %r" % (table,)
+            raise TableDBError("unknown table: %r" % (table,))
         if not tcolpickles:
-            raise TableDBError, "unknown table: %r" % (table,)
+            raise TableDBError("unknown table: %r" % (table,))
         self.__tablecolumns[table] = pickle.loads(tcolpickles)
 
     def __new_rowid(self, table, txn) :
@@ -388,14 +388,14 @@
         txn = None
         try:
             if not self.db.has_key(_columns_key(table)):
-                raise TableDBError, "unknown table"
+                raise TableDBError("unknown table")
 
             # check the validity of each column name
             if table not in self.__tablecolumns:
                 self.__load_column_info(table)
             for column in rowdict.keys() :
                 if not self.__tablecolumns[table].count(column):
-                    raise TableDBError, "unknown column: %r" % (column,)
+                    raise TableDBError("unknown column: %r" % (column,))
 
             # get a unique row identifier for this row
             txn = self.env.txn_begin()
@@ -419,7 +419,7 @@
                 txn.abort()
                 self.db.delete(_rowid_key(table, rowid))
                 txn = None
-            raise TableDBError, dberror.args[1], info[2]
+            raise TableDBError(dberror.args[1]).with_traceback(info[2])
         finally:
             if txn:
                 txn.abort()
@@ -473,7 +473,7 @@
                         txn.abort()
 
         except DBError as dberror:
-            raise TableDBError, dberror.args[1]
+            raise TableDBError(dberror.args[1])
 
     def Delete(self, table, conditions={}):
         """Delete(table, conditions) - Delete items matching the given
@@ -513,7 +513,7 @@
                     if txn:
                         txn.abort()
         except DBError as dberror:
-            raise TableDBError, dberror.args[1]
+            raise TableDBError(dberror.args[1])
 
 
     def Select(self, table, columns, conditions={}):
@@ -533,7 +533,7 @@
                 columns = self.__tablecolumns[table]
             matching_rowids = self.__Select(table, columns, conditions)
         except DBError as dberror:
-            raise TableDBError, dberror.args[1]
+            raise TableDBError(dberror.args[1])
         # return the matches as a list of dictionaries
         return matching_rowids.values()
 
@@ -554,7 +554,7 @@
             columns = self.tablecolumns[table]
         for column in (columns + list(conditions.keys())):
             if not self.__tablecolumns[table].count(column):
-                raise TableDBError, "unknown column: %r" % (column,)
+                raise TableDBError("unknown column: %r" % (column,))
 
         # keyed on rows that match so far, containings dicts keyed on
         # column names containing the data for that row and column.
@@ -708,7 +708,7 @@
                 del self.__tablecolumns[table]
 
         except DBError as dberror:
-            raise TableDBError, dberror.args[1]
+            raise TableDBError(dberror.args[1])
         finally:
             if txn:
                 txn.abort()
diff --git a/Lib/bsddb/test/test_basics.py b/Lib/bsddb/test/test_basics.py
index 7bfe03b..d7b2d2f 100644
--- a/Lib/bsddb/test/test_basics.py
+++ b/Lib/bsddb/test/test_basics.py
@@ -735,7 +735,7 @@
         except db.DBError as e:
             pass
         else:
-            raise RuntimeError, "DBTxn.abort() called after DB_TXN no longer valid w/o an exception"
+            raise RuntimeError("DBTxn.abort() called after DB_TXN no longer valid w/o an exception")
 
         txn = self.env.txn_begin()
         txn.commit()
@@ -744,7 +744,7 @@
         except db.DBError as e:
             pass
         else:
-            raise RuntimeError, "DBTxn.commit() called after DB_TXN no longer valid w/o an exception"
+            raise RuntimeError("DBTxn.commit() called after DB_TXN no longer valid w/o an exception")
 
 
 class BTreeTransactionTestCase(BasicTransactionTestCase):
diff --git a/Lib/bsddb/test/test_compare.py b/Lib/bsddb/test/test_compare.py
index 522ff57..886c20d 100644
--- a/Lib/bsddb/test/test_compare.py
+++ b/Lib/bsddb/test/test_compare.py
@@ -192,7 +192,7 @@
             if l == r:
                 # pass the set_bt_compare test
                 return 0
-            raise RuntimeError, "i'm a naughty comparison function"
+            raise RuntimeError("i'm a naughty comparison function")
         self.createDB (bad_comparator)
         #print "\n*** test should print 2 uncatchable tracebacks ***"
         self.addDataToDB (['a', 'b', 'c'])  # this should raise, but...
diff --git a/Lib/bsddb/test/test_dbtables.py b/Lib/bsddb/test/test_dbtables.py
index 970f253..b03971b 100644
--- a/Lib/bsddb/test/test_dbtables.py
+++ b/Lib/bsddb/test/test_dbtables.py
@@ -355,7 +355,7 @@
             # success, the string value in mappings isn't callable
             pass
         else:
-            raise RuntimeError, "why was TypeError not raised for bad callable?"
+            raise RuntimeError("why was TypeError not raised for bad callable?")
 
         # Delete key in select conditions
         values = self.tdb.Select(
diff --git a/Lib/bsddb/test/test_pickle.py b/Lib/bsddb/test/test_pickle.py
index a5ccfa3..66d421c 100644
--- a/Lib/bsddb/test/test_pickle.py
+++ b/Lib/bsddb/test/test_pickle.py
@@ -48,9 +48,9 @@
             #print repr(pickledEgg)
             rottenEgg = pickle.loads(pickledEgg)
             if rottenEgg.args != egg.args or type(rottenEgg) != type(egg):
-                raise Exception, (rottenEgg, '!=', egg)
+                raise Exception(rottenEgg, '!=', egg)
         else:
-            raise Exception, "where's my DBError exception?!?"
+            raise Exception("where's my DBError exception?!?")
 
         self.db.close()
         self.env.close()
