python-shell icon indicating copy to clipboard operation
python-shell copied to clipboard

Can't catch JSON.parse() error?

Open luke-waymark-addinsight opened this issue 4 years ago • 2 comments

If I set the mode to 'json', and python prints something that isn't JSON, then python-shell's use of JSON.parse() causes an error as one would expect. However, I can't seem to catch the error and it's just crashing my program.

I've tried wrapping either a PythonShell() object or a PythonShell.run() function in a try catch, using the function (err) callback, listing to an 'error' emit, but nothing can seem to catch this error.

For now I can set it to text mode and manually call JSON.parse() but this seems an unsatisfying solution.

luke-waymark-addinsight avatar Sep 15 '21 00:09 luke-waymark-addinsight

Yeah... this isn't great :|

The problem is that the parse method is called inside a pipe handler, so the context in which the error happens is isolated to that specific handler. The handler is called asynchronously and you can't catch errors in asynchronus code with a try-catch (see # 2).

So for now unfortunately your solution is the correct one.

The library could be improved by catching the error inside the handler and emitting a parseError event, so I'll categorize this as a enhancement idea.

Almenon avatar Oct 02 '21 19:10 Almenon

Same issue here

petem24 avatar Jan 25 '24 16:01 petem24