Skip to content

Provide Path/URL in CSV reading exceptions #1815

@koperagen

Description

@koperagen

Try running this code that contains a user error in URL:
DataFrame.readCsv("https://github.com/Kotlin/dataframe/blob/master/data/jetbrains_repositories.csv")

What users sees:

Exception in thread "main" java.lang.IllegalStateException: Could not read delimiter-separated data: CsvReaderException: Caught exception: While processing row 7, column (Column 0):
	at org.jetbrains.kotlinx.dataframe.impl.io.ReadDelimDeephavenKt.readDelimImpl(readDelim.kt:155)
	at org.jetbrains.kotlinx.dataframe.io.ReadCsvDeephavenKt.readCsv$lambda$3(readCsv.kt:220)
	at org.jetbrains.kotlinx.dataframe.io.CommonKt.catchHttpResponse(common.kt:42)
	at org.jetbrains.kotlinx.dataframe.io.ReadCsvDeephavenKt.readCsv(readCsv.kt:219)
	at org.jetbrains.kotlinx.dataframe.io.ReadCsvDeephavenKt.readCsv$default(readCsv.kt:200)
	at org.jetbrains.kotlin.MainKt.main(Main.kt:8)
	at org.jetbrains.kotlin.MainKt.main(Main.kt)
Caused by: io.deephaven.csv.util.CsvReaderException: Caught exception
	at io.deephaven.csv.reading.CsvReader.commonReadLogic(CsvReader.java:240)
	at io.deephaven.csv.reading.CsvReader.delimitedReadLogic(CsvReader.java:99)
	at io.deephaven.csv.reading.CsvReader.read(CsvReader.java:70)
	at org.jetbrains.kotlinx.dataframe.impl.io.ReadDelimDeephavenKt.readDelimImpl(readDelim.kt:143)
	... 6 more
Caused by: io.deephaven.csv.util.CsvReaderException: While processing row 7, column (Column 0):
	at io.deephaven.csv.reading.ParseInputToDenseStorage$RowAppender.processNextRow(ParseInputToDenseStorage.java:200)
	at io.deephaven.csv.reading.ParseInputToDenseStorage.doit(ParseInputToDenseStorage.java:64)
	at io.deephaven.csv.reading.CsvReader.lambda$commonReadLogic$0(CsvReader.java:141)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
	at java.base/java.lang.Thread.run(Thread.java:1474)
Caused by: io.deephaven.csv.util.CsvReaderException: Column assumed empty but contains data
	at io.deephaven.csv.reading.ParseInputToDenseStorage.appendToDenseStorageWriter(ParseInputToDenseStorage.java:263)
	at io.deephaven.csv.reading.ParseInputToDenseStorage.access$000(ParseInputToDenseStorage.java:23)
	at io.deephaven.csv.reading.ParseInputToDenseStorage$RowAppender.processNextRow(ParseInputToDenseStorage.java:192)
	... 8 more

Proposed:
Let's catch CsvReaderException and re-throw our own exception with URL + original exception as cause. Maybe clickable URL will prompt user to check actual content and see that in fact this is not direct link to CSV, but to a GitHub page. IMO all our reading functions should follow this idea

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions