diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index e3110a3f1..c2e9bf97a 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -2101,63 +2101,65 @@ block of the same language as the previous."
 			    (let (case-fold-search)
 			      (string-match-p "#\\+BEGIN_SRC" block)))))
     (if (and info start) ;; At src block, but not within blank lines after it.
-        (let* ((copy (org-element-copy (org-element-at-point)))
-               (before (org-element-begin copy))
-               (beyond (org-element-end copy))
-               (parts
-                (if (org-region-active-p)
-                    (list body-beg (region-beginning) (region-end) body-end)
-                  (list body-beg (point) body-end)))
-               (pads ;; To calculate left-side white-space padding.
-                (if (org-region-active-p)
-                    (list (region-beginning) (region-end))
-                  (list (point))))
-               (n (- (length parts) 2)) ;; 1 or 2 parts in `dolist' below.
-               ;; `post-blank' caches the property before setting it to 0.
-               (post-blank (org-element-property :post-blank copy)))
-          ;; Point or region are within body when parts is in increasing order.
-          (unless (apply #'<= parts)
-            (user-error "Select within the source block body to split it"))
-          (setq parts (mapcar (lambda (p) (buffer-substring (car p) (cdr p)))
-                              (seq-mapn #'cons parts (cdr parts))))
-          ;; Map positions to columns for white-space padding.
-          (setq pads (mapcar (lambda (p) (save-excursion
-                                           (goto-char p)
-                                           (current-column)))
-                             pads))
-          (push 0 pads) ;; The 1st part never requires white-space padding.
-          (setq parts (mapcar (lambda (p) (string-join
-                                           (list (make-string (car p) ?\s)
-                                                 (cdr p))))
-                              (seq-mapn #'cons pads parts)))
-          (delete-region before beyond)
-          ;; Set `:post-blank' to 0.  We take care of spacing between blocks.
-          (org-element-put-property copy :post-blank 0)
-          (org-element-put-property copy :value (car parts))
-          (insert (org-element-interpret-data copy))
-          ;; `org-indent-block' may see another `org-element' (e.g. paragraph)
-          ;; immediately after the block.  Ensure to indent the inserted block
-          ;; and move point to its end.
-          (org-babel-previous-src-block 1)
-          (org-indent-block)
-          (goto-char (org-element-end (org-element-at-point)))
-          (org-element-put-property copy :caption nil)
-          (org-element-put-property copy :name nil)
-          ;; Insert the 2nd block, and the 3rd block when region is active.
-          (dolist (part (cdr parts))
-            (org-element-put-property copy :value part)
-            (insert (if arg (concat stars "\n") "\n"))
-            (cl-decf n)
-            (when (= n 0)
-              ;; Use `post-blank' to reset the property of the last block.
-              (org-element-put-property copy :post-blank post-blank))
-            (insert (org-element-interpret-data copy))
-            ;; Ensure to indent the inserted block and move point to its end.
-            (org-babel-previous-src-block 1)
-            (org-indent-block)
-            (goto-char (org-element-end (org-element-at-point))))
-          ;; Leave point at the last inserted block.
-          (goto-char (org-babel-previous-src-block 1)))
+        (condition-case nil
+            (let* ((copy (org-element-copy (org-element-at-point))) ;; <= HERE?
+                   (before (org-element-begin copy))
+                   (beyond (org-element-end copy))
+                   (parts
+                    (if (org-region-active-p)
+                        (list body-beg (region-beginning) (region-end) body-end)
+                      (list body-beg (point) body-end)))
+                   (pads ;; To calculate left-side white-space padding.
+                    (if (org-region-active-p)
+                        (list (region-beginning) (region-end))
+                      (list (point))))
+                   (n (- (length parts) 2)) ;; 1 or 2 parts in `dolist' below.
+                   ;; `post-blank' caches the property before setting it to 0.
+                   (post-blank (org-element-property :post-blank copy)))
+              ;; Point or region are within body when parts is in increasing order.
+              (unless (apply #'<= parts)
+                (user-error "Select within the source block body to split it"))
+              (setq parts (mapcar (lambda (p) (buffer-substring (car p) (cdr p)))
+                                  (seq-mapn #'cons parts (cdr parts))))
+              ;; Map positions to columns for white-space padding.
+              (setq pads (mapcar (lambda (p) (save-excursion
+                                               (goto-char p)
+                                               (current-column)))
+                                 pads))
+              (push 0 pads) ;; The 1st part never requires white-space padding.
+              (setq parts (mapcar (lambda (p) (string-join
+                                               (list (make-string (car p) ?\s)
+                                                     (cdr p))))
+                                  (seq-mapn #'cons pads parts)))
+              (delete-region before beyond)
+              ;; Set `:post-blank' to 0.  We take care of spacing between blocks.
+              (org-element-put-property copy :post-blank 0)
+              (org-element-put-property copy :value (car parts))
+              (insert (org-element-interpret-data copy))
+              ;; `org-indent-block' may see another `org-element' (e.g. paragraph)
+              ;; immediately after the block.  Ensure to indent the inserted block
+              ;; and move point to its end.
+              (org-babel-previous-src-block 1)
+              (org-indent-block)
+              (goto-char (org-element-end (org-element-at-point)))
+              (org-element-put-property copy :caption nil)
+              (org-element-put-property copy :name nil)
+              ;; Insert the 2nd block, and the 3rd block when region is active.
+              (dolist (part (cdr parts))
+                (org-element-put-property copy :value part)
+                (insert (if arg (concat stars "\n") "\n"))
+                (cl-decf n)
+                (when (= n 0)
+                  ;; Use `post-blank' to reset the property of the last block.
+                  (org-element-put-property copy :post-blank post-blank))
+                (insert (org-element-interpret-data copy))
+                ;; Ensure to indent the inserted block and move point to its end.
+                (org-babel-previous-src-block 1)
+                (org-indent-block)
+                (goto-char (org-element-end (org-element-at-point))))
+              ;; Leave point at the last inserted block.
+              (goto-char (org-babel-previous-src-block 1)))
+          (user-error "Error in `org-babel-edit-prep:<LANG>'?"))
       (let ((start (point))
 	    (lang (or (car info) ; Reuse language from previous block.
                       (completing-read
