ENH: Include line number and number of fields when read_csv() callable with `engine="python"` raises ParserWarning
- [X] closes #61838  
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [X] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

## Description of the change
`read_csv()` currently provides the description of an invalid row(expected_columns, actual_columns, number, text) when the row has too many elements where `engine="pyarrow"`, but the callable can only include the contents of the row when `engine="python"`.

(For more details on pyarrow.csv.InvalidRow, see [pyarrow documentation](https://arrow.apache.org/docs/python/generated/pyarrow.csv.ParseOptions.html#pyarrow.csv.ParseOptions.invalid_row_handler))

This PR proposes to additionally pass `expected_columns`, `actual_columns` and `row` when `on_bad_lines` is a callable and `engine="python"`, so that users can desribe the invalid row more in detail.

The order of the arguments has been aligned with `pyarrow`.
Thanks for the PR, but this enhancement needs more discussion before moving forward with a PR. Additionally this approach.

1. Is an API breaking change for user pass the older form of the callable
2. You callable description doesn't seem to match PyArrow from the example in https://arrow.apache.org/docs/python/generated/pyarrow.csv.ParseOptions.html#pyarrow.csv.ParseOptions

so closing Many thanks @mroeschke ,

>1. Is an API breaking change for user pass the older form of the callable

Understood. Maybe there could be some further discussions regarding this in the near future considering there are some suggestions at #61978 .


>2. You callable description doesn't seem to match PyArrow from the example in https://arrow.apache.org/docs/python/generated/pyarrow.csv.ParseOptions.html#pyarrow.csv.ParseOptions

I've meant the callable has been aligned with `pyarrow.csv.InvalidRow`, but as you mentioned, this also needs to be considered in terms of backwards compatibility.