Raise KeyError if passed an invalid row entry (#15227)

This commit is contained in:
Scott Wadden
2020-08-26 15:00:54 -03:00
committed by GitHub
parent d85015e922
commit a9a9860b0b

View File

@@ -322,24 +322,29 @@ proc rowEntry*(my: var CsvParser, entry: string): var string =
##
## Assumes that `readHeaderRow <#readHeaderRow,CsvParser>`_ has already been
## called.
##
## If specified `entry` does not exist, raises KeyError.
runnableExamples:
import streams
var strm = newStringStream("One,Two,Three\n1,2,3\n\n10,20,30")
var parser: CsvParser
parser.open(strm, "tmp.csv")
## Need calling `readHeaderRow`.
## Requires calling `readHeaderRow`.
parser.readHeaderRow()
doAssert parser.readRow()
doAssert parser.rowEntry("One") == "1"
doAssert parser.rowEntry("Two") == "2"
doAssert parser.rowEntry("Three") == "3"
## `parser.rowEntry("NotExistEntry")` causes SIGSEGV fault.
doAssertRaises(KeyError):
discard parser.rowEntry("NonexistentEntry")
parser.close()
strm.close()
let index = my.headers.find(entry)
if index >= 0:
result = my.row[index]
else:
raise newException(KeyError, "Entry `" & entry & "` doesn't exist")
when not defined(testing) and isMainModule:
import os