Can't catch JSON.parse() error?
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.
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.
Same issue here