accept issue 3436
diff --git a/Lib/csv.py b/Lib/csv.py
index 41026e0..7210dac 100644
--- a/Lib/csv.py
+++ b/Lib/csv.py
@@ -71,7 +71,7 @@
 class DictReader:
     def __init__(self, f, fieldnames=None, restkey=None, restval=None,
                  dialect="excel", *args, **kwds):
-        self.fieldnames = fieldnames    # list of keys for the dict
+        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, **kwds)
@@ -81,11 +81,25 @@
     def __iter__(self):
         return self
 
+    @property
+    def fieldnames(self):
+        if self._fieldnames is None:
+            try:
+                self._fieldnames = self.reader.next()
+            except StopIteration:
+                pass
+        self.line_num = self.reader.line_num
+        return self._fieldnames
+
+    @fieldnames.setter
+    def fieldnames(self, value):
+        self._fieldnames = value
+
     def next(self):
+        if self.line_num == 0:
+            # Used only for its side effect.
+            self.fieldnames
         row = self.reader.next()
-        if self.fieldnames is None:
-            self.fieldnames = row
-            row = self.reader.next()
         self.line_num = self.reader.line_num
 
         # unlike the basic reader, we prefer not to return blanks,