Skip to content

Python: Run Selection/Line in Python Terminal drops blank lines inside triple-quoted strings #25701

@Ma-XX-oN

Description

@Ma-XX-oN

Type: Bug

Behaviour

When I use Python: Run Selection/Line in Python Terminal on code that
contains a triple-quoted string with a blank line “sandwiched” between two
non-blank lines, that blank line is removed in the version of the code that
gets executed in the REPL.

Running the same code as a normal script (python file.py) preserves the blank
line. So the behaviour of the code depends on whether it is run as a script or
via Run Selection/Line in Python Terminal, which should not happen.

This breaks code that relies on the exact newline structure of the string, such
as regex-based parsing of multi-line documentation blocks.

Steps to reproduce:

  1. Create a new file, e.g. test_blank_line.py, with exactly this content:

     text = """line 1
     line 2
    
     line 4
     """
    
     print(repr(text))
    

    Note: there is a blank line between line 2 and line 4 inside the
    triple-quoted string.

  2. Run the file normally in the integrated terminal:

     python test_blank_line.py
    
  3. Observe the output:

     'line 1\nline 2\n\nline 4\n'
    

    There are two \n characters between line 2 and line 4, as expected.

  4. Now select the entire code in test_blank_line.py and run:

    • Command Palette → Python: Run Selection/Line in Python Terminal, or
    • Right click → Run Selection/Line in Python Terminal.
  5. Observe the output printed in the Python REPL in the integrated terminal:

     'line 1\nline 2\nline 4\n'
    

    The blank line between line 2 and line 4 is now missing (only a
    single \n remains). This shows that the text sent to the REPL by
    Run Selection/Line in Python Terminal does not faithfully match the text in
    the editor.


Diagnostic data

Output for Python in the Output panel (ViewOutput, change the drop-down in the upper-right of the Output panel to Python)

>>> text = """line 1
... line 2
... line 4
... """
>>>
>>> print(repr(text))
'line 1\nline 2\nline 4\n'
>>>

Extension version: 2025.20.1
VS Code version: Code 1.107.1 (994fd12f8d3a5aa16f17d42c041e5809167e845a, 2025-12-17T14:15:14.850Z)
OS version: Windows_NT x64 10.0.26200
Modes:

  • Python version (& distribution if applicable, e.g. Anaconda): 3.12.12
  • Type of virtual environment used (e.g. conda, venv, virtualenv, etc.): Venv
  • Value of the python.languageServer setting: Default
User Settings


languageServer: "Pylance"

Installed Extensions
Extension Name Extension Id Version
autodocstring njp 0.6.1
cmake-highlight zch 0.0.2
cmake-tools ms- 1.21.36
code-spell-checker str 4.4.0
code-spell-checker-british-english str 1.4.34
code-spell-checker-canadian-english str 1.1.29
copilot-chat Git 0.35.2
cpptools ms- 1.30.0
cpptools-extension-pack ms- 1.3.1
cpptools-themes ms- 2.0.0
debugpy ms- 2025.18.0
graphviz-interactive-preview tin 0.3.5
hexeditor ms- 1.11.1
htmlplay bia 0.0.10
js-debug ms- 1.105.0
js-debug-companion ms- 1.1.3
openscad-language-support Lea 2.0.1
overtype DrM 0.5.0
powershell ms- 2025.4.0
prettier-plus Shu 3.0.0
project-manager ale 13.0.1
python ms- 2025.20.1
remote-containers ms- 0.434.0
text-power-tools qcz 1.51.0
vscode-autohotkey-debug zer 1.11.1
vscode-autohotkey-plus-plus mar 6.7.1
vscode-containers ms- 2.3.0
vscode-js-profile-table ms- 1.0.10
vscode-pylance ms- 2025.10.4
vscode-python-envs ms- 1.14.0
vscode-texttoolbox car 2.29.0
System Info
Item Value
CPUs AMD Ryzen 7 5700U with Radeon Graphics (16 x 1797)
GPU Status 2d_canvas: enabled
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_graphite: disabled_off
trees_in_viz: disabled_off
video_decode: enabled
video_encode: enabled
webgl: enabled
webgl2: enabled
webgpu: enabled
webnn: disabled_off
Load (avg) undefined
Memory (System) 7.38GB (0.77GB free)
Process Argv --crash-reporter-id 1cf35118-2bd4-4544-b0e1-09535383293d
Screen Reader yes
VM 0%
A/B Experiments
vsliv368:30146709
binariesv615:30325510
nativeloc1:31344060
dwcopilot:31170013
dwoutputs:31242946
copilot_t_ci:31333650
e5gg6876:31282496
pythonrdcb7:31342333
6518g693:31436602
aj953862:31281341
nes-set-on:31351930
6abeh943:31336334
envsdeactivate2:31353495
cloudbuttont:31379625
todos-1:31405332
3efgi100_wstrepl:31403338
use-responses-api:31390855
6j29d282:31407606
2a0ce269:31428710
ec5jj548:31422691
terminalsuggestenabled:31431119
cmp-ext-treat:31426748
cp_cls_c_966_ss:31435507
copilot6169-t2000-control:31440805
a9239246:31437220
c0683394:31419495
478ah919:31426797
ge8j1254_inline_auto_hint_haiku:31427726
nes-autoexp-off:31439334
a5gib710:31434435
38bie571_auto:31426784
no_request_with_suggest:31435826
rename_enabled:31436409
7a04d226_do_not_restore_last_panel_session:31438103
anthropic_thinking_t:31432745
p_e9cf0154:31434513
h0hdh950:31428394
cp_cls_c_1081:31433293
copilot-nes-callisto-trt:31434412
nowdiget:31438323

Metadata

Metadata

Assignees

No one assigned

    Labels

    triage-neededNeeds assignment to the proper sub-team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions