**kwds arg was missing from __init__ for Dict{Reader,Writer} classes.
will backport.
diff --git a/Lib/csv.py b/Lib/csv.py
index fcb8a8f..096badc 100644
--- a/Lib/csv.py
+++ b/Lib/csv.py
@@ -93,11 +93,11 @@
 
 class DictReader:
     def __init__(self, f, fieldnames, restkey=None, restval=None,
-                 dialect="excel", *args):
+                 dialect="excel", *args, **kwds):
         self.fieldnames = fieldnames    # list of keys for the dict
         self.restkey = restkey          # key to catch long rows
         self.restval = restval          # default value for short rows
-        self.reader = reader(f, dialect, *args)
+        self.reader = reader(f, dialect, *args, **kwds)
 
     def __iter__(self):
         return self
@@ -122,7 +122,7 @@
 
 class DictWriter:
     def __init__(self, f, fieldnames, restval="", extrasaction="raise",
-                 dialect="excel", *args):
+                 dialect="excel", *args, **kwds):
         self.fieldnames = fieldnames    # list of keys for the dict
         self.restval = restval          # for writing short dicts
         if extrasaction.lower() not in ("raise", "ignore"):
@@ -130,7 +130,7 @@
                   ("extrasaction (%s) must be 'raise' or 'ignore'" %
                    extrasaction)
         self.extrasaction = extrasaction
-        self.writer = writer(f, dialect, *args)
+        self.writer = writer(f, dialect, *args, **kwds)
 
     def _dict_to_list(self, rowdict):
         if self.extrasaction == "raise":
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index ba7cc09..d85c5b6 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -447,6 +447,13 @@
         self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
                                          "4": '4', "5": '5', "6": '6'})
 
+    def test_read_semi_sep(self):
+        reader = csv.DictReader(["1;2;abc;4;5;6\r\n"],
+                                fieldnames="1 2 3 4 5 6".split(),
+                                delimiter=';')
+        self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
+                                         "4": '4', "5": '5', "6": '6'})
+
 class TestArrayWrites(unittest.TestCase):
     def test_int_write(self):
         import array