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
commit a9a9860b0b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

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