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,