I find that, in a loop like:

(unwind-protect
    (while waiting-for-output
      (accept-process-output process))
  (if waiting-for-output
      (warn "accept-process-output exited non-locally!")))

i.e. waiting for an async process (iPython), accept-process-output (emacs 27.2) sometimes exits non-locally. I checked for any signals that might cause this (none), and then I suspected re-entering a-p-e could throw, so guarded against that, but still no luck.  

Does anyone know any other reasons that accept-process-output would (occasionally) exit non-locally?  Is this expected?