IndentationError when pasting code in Python 3 interpreter modeHow do I protect Python code?python open built-in function: difference between modes a, a+, w, w+, and r+?Find full path of the Python interpreter?If Python is interpreted, what are .pyc files?Why does Python code run faster in a function?Python Class method definition : “unexpected indent”OpenCv pytesseract for OCRtkinter button to run command and destroy popup windowTypeError: unsupported operand type(s) for %: 'NoneType' and 'float'removed spaces and tabs in python code but still error coming
How to manage expenditure when billing cycles and paycheck cycles are not aligned?
Safely hang a mirror that does not have hooks
What benefits does the Power Word Kill spell have?
Is "ln" (natural log) and "log" the same thing if used in this answer?
Strange Sticky Substance on Digital Camera
Is there any reason nowadays to use a neon indicator lamp instead of an LED?
Writing a letter of recommendation for a mediocre student
Did Apollo carry and use WD40?
To what extent is it worthwhile to report check fraud / refund scams?
Late 1970's and 6502 chip facilities for operating systems
If an object moving in a circle experiences centripetal force, then doesn't it also experience centrifugal force, because of Newton's third law?
Norwegian refuses EU delay (4.7 hours) compensation because it turned out there was nothing wrong with the aircraft
Hiking with a mule or two?
A high quality contribution but an annoying error is present in my published article
What is the need of methods like GET and POST in the HTTP protocol?
Is it impolite to ask for halal food when traveling to and in Thailand?
If the EU does not offer an extension to UK's Article 50 invocation, is the Benn Bill irrelevant?
How does this circuit start up?
Why does this image of Jupiter look so strange?
How do pilots align the HUD with their eyeballs?
Where are they calling from?
Why are there two fundamental laws of logic?
Was there a trial by combat between a man and a dog in medieval France?
Painting a 4x6 grid with 2 colours
IndentationError when pasting code in Python 3 interpreter mode
How do I protect Python code?python open built-in function: difference between modes a, a+, w, w+, and r+?Find full path of the Python interpreter?If Python is interpreted, what are .pyc files?Why does Python code run faster in a function?Python Class method definition : “unexpected indent”OpenCv pytesseract for OCRtkinter button to run command and destroy popup windowTypeError: unsupported operand type(s) for %: 'NoneType' and 'float'removed spaces and tabs in python code but still error coming
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
When I was running the following code, which has blank lines (no space) inside functions, I got different behavior from Python 3.6.5 when running the code line by line in interpreter mode and python3 split.py
:
# File split.py
def find(s, start, predictor):
for i in range(start, len(s)):
if predictor(s[i]):
return i
return -1
def find_all(s, sep=" tn"):
beg_of_nonsep = 0
while beg_of_nonsep < len(s):
beg_of_nonsep = find(s, beg_of_nonsep, lambda ch, sep_chs=sep: ch not in sep_chs)
if beg_of_nonsep == -1:
break
end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
if end_of_nonsep == -1:
end_of_nonsep = len(s)
yield (beg_of_nonsep, end_of_nonsep)
beg_of_nonsep = end_of_nonsep + 1
split = lambda s: [s[beg: end] for (beg, end) in find_all(s)]
print(split(""))
print(split(" tn"))
print(split(" tssssn"))
When running the code line by line in interpreter mode, python3
gave me nasty errors:
Type "help", "copyright", "credits" or "license" for more information.
>>> def find(s, start, predictor):
... for i in range(start, len(s)):
... if predictor(s[i]):
... return i
... return -1
...
>>> def find_all(s, sep=" tn"):
... beg_of_nonsep = 0
... while beg_of_nonsep < len(s):
... beg_of_nonsep = find(s, beg_of_nonsep, lambda ch, sep_chs=sep: ch not in sep_chs)
... if beg_of_nonsep == -1:
... break
...
>>> end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
File "<stdin>", line 1
end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
^
IndentationError: unexpected indent
>>> if end_of_nonsep == -1:
File "<stdin>", line 1
if end_of_nonsep == -1:
^
IndentationError: unexpected indent
>>> end_of_nonsep = len(s)
File "<stdin>", line 1
end_of_nonsep = len(s)
^
IndentationError: unexpected indent
>>>
>>> yield (beg_of_nonsep, end_of_nonsep)
File "<stdin>", line 1
yield (beg_of_nonsep, end_of_nonsep)
^
IndentationError: unexpected indent
>>>
>>> beg_of_nonsep = end_of_nonsep + 1
File "<stdin>", line 1
beg_of_nonsep = end_of_nonsep + 1
^
IndentationError: unexpected indent
>>>
>>> split = lambda s: [s[beg: end] for (beg, end) in find_all(s)]
>>>
>>> print(split(""))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'NoneType' object is not iterable
>>> print(split(" tn"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'NoneType' object is not iterable
>>> print(split(" tssssn"))
And the last print
here never quit until I used ctrlc to stop it.
Thus, I thought there were many bugs with my code.
However, when I ran the code with python3 split.py
, none of this happened:
[]
[]
['ssss']
This is rather confusing to me.
To be clear, I was actually using vimcmdline on Debian 9.8 with vim 8.1.
I am also using pylint
through pymode
, which split any trailing space, of which it considered superfluous.
This problem happened when I tried to use its builtin keybinding to send split.py
to the python3
in the tmux
split it opened.
I have already filled an issue, but I can't help wonder why python3
behaves like this.
python
migrated from unix.stackexchange.com Apr 22 at 9:42
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
add a comment
|
When I was running the following code, which has blank lines (no space) inside functions, I got different behavior from Python 3.6.5 when running the code line by line in interpreter mode and python3 split.py
:
# File split.py
def find(s, start, predictor):
for i in range(start, len(s)):
if predictor(s[i]):
return i
return -1
def find_all(s, sep=" tn"):
beg_of_nonsep = 0
while beg_of_nonsep < len(s):
beg_of_nonsep = find(s, beg_of_nonsep, lambda ch, sep_chs=sep: ch not in sep_chs)
if beg_of_nonsep == -1:
break
end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
if end_of_nonsep == -1:
end_of_nonsep = len(s)
yield (beg_of_nonsep, end_of_nonsep)
beg_of_nonsep = end_of_nonsep + 1
split = lambda s: [s[beg: end] for (beg, end) in find_all(s)]
print(split(""))
print(split(" tn"))
print(split(" tssssn"))
When running the code line by line in interpreter mode, python3
gave me nasty errors:
Type "help", "copyright", "credits" or "license" for more information.
>>> def find(s, start, predictor):
... for i in range(start, len(s)):
... if predictor(s[i]):
... return i
... return -1
...
>>> def find_all(s, sep=" tn"):
... beg_of_nonsep = 0
... while beg_of_nonsep < len(s):
... beg_of_nonsep = find(s, beg_of_nonsep, lambda ch, sep_chs=sep: ch not in sep_chs)
... if beg_of_nonsep == -1:
... break
...
>>> end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
File "<stdin>", line 1
end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
^
IndentationError: unexpected indent
>>> if end_of_nonsep == -1:
File "<stdin>", line 1
if end_of_nonsep == -1:
^
IndentationError: unexpected indent
>>> end_of_nonsep = len(s)
File "<stdin>", line 1
end_of_nonsep = len(s)
^
IndentationError: unexpected indent
>>>
>>> yield (beg_of_nonsep, end_of_nonsep)
File "<stdin>", line 1
yield (beg_of_nonsep, end_of_nonsep)
^
IndentationError: unexpected indent
>>>
>>> beg_of_nonsep = end_of_nonsep + 1
File "<stdin>", line 1
beg_of_nonsep = end_of_nonsep + 1
^
IndentationError: unexpected indent
>>>
>>> split = lambda s: [s[beg: end] for (beg, end) in find_all(s)]
>>>
>>> print(split(""))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'NoneType' object is not iterable
>>> print(split(" tn"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'NoneType' object is not iterable
>>> print(split(" tssssn"))
And the last print
here never quit until I used ctrlc to stop it.
Thus, I thought there were many bugs with my code.
However, when I ran the code with python3 split.py
, none of this happened:
[]
[]
['ssss']
This is rather confusing to me.
To be clear, I was actually using vimcmdline on Debian 9.8 with vim 8.1.
I am also using pylint
through pymode
, which split any trailing space, of which it considered superfluous.
This problem happened when I tried to use its builtin keybinding to send split.py
to the python3
in the tmux
split it opened.
I have already filled an issue, but I can't help wonder why python3
behaves like this.
python
migrated from unix.stackexchange.com Apr 22 at 9:42
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
add a comment
|
When I was running the following code, which has blank lines (no space) inside functions, I got different behavior from Python 3.6.5 when running the code line by line in interpreter mode and python3 split.py
:
# File split.py
def find(s, start, predictor):
for i in range(start, len(s)):
if predictor(s[i]):
return i
return -1
def find_all(s, sep=" tn"):
beg_of_nonsep = 0
while beg_of_nonsep < len(s):
beg_of_nonsep = find(s, beg_of_nonsep, lambda ch, sep_chs=sep: ch not in sep_chs)
if beg_of_nonsep == -1:
break
end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
if end_of_nonsep == -1:
end_of_nonsep = len(s)
yield (beg_of_nonsep, end_of_nonsep)
beg_of_nonsep = end_of_nonsep + 1
split = lambda s: [s[beg: end] for (beg, end) in find_all(s)]
print(split(""))
print(split(" tn"))
print(split(" tssssn"))
When running the code line by line in interpreter mode, python3
gave me nasty errors:
Type "help", "copyright", "credits" or "license" for more information.
>>> def find(s, start, predictor):
... for i in range(start, len(s)):
... if predictor(s[i]):
... return i
... return -1
...
>>> def find_all(s, sep=" tn"):
... beg_of_nonsep = 0
... while beg_of_nonsep < len(s):
... beg_of_nonsep = find(s, beg_of_nonsep, lambda ch, sep_chs=sep: ch not in sep_chs)
... if beg_of_nonsep == -1:
... break
...
>>> end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
File "<stdin>", line 1
end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
^
IndentationError: unexpected indent
>>> if end_of_nonsep == -1:
File "<stdin>", line 1
if end_of_nonsep == -1:
^
IndentationError: unexpected indent
>>> end_of_nonsep = len(s)
File "<stdin>", line 1
end_of_nonsep = len(s)
^
IndentationError: unexpected indent
>>>
>>> yield (beg_of_nonsep, end_of_nonsep)
File "<stdin>", line 1
yield (beg_of_nonsep, end_of_nonsep)
^
IndentationError: unexpected indent
>>>
>>> beg_of_nonsep = end_of_nonsep + 1
File "<stdin>", line 1
beg_of_nonsep = end_of_nonsep + 1
^
IndentationError: unexpected indent
>>>
>>> split = lambda s: [s[beg: end] for (beg, end) in find_all(s)]
>>>
>>> print(split(""))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'NoneType' object is not iterable
>>> print(split(" tn"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'NoneType' object is not iterable
>>> print(split(" tssssn"))
And the last print
here never quit until I used ctrlc to stop it.
Thus, I thought there were many bugs with my code.
However, when I ran the code with python3 split.py
, none of this happened:
[]
[]
['ssss']
This is rather confusing to me.
To be clear, I was actually using vimcmdline on Debian 9.8 with vim 8.1.
I am also using pylint
through pymode
, which split any trailing space, of which it considered superfluous.
This problem happened when I tried to use its builtin keybinding to send split.py
to the python3
in the tmux
split it opened.
I have already filled an issue, but I can't help wonder why python3
behaves like this.
python
When I was running the following code, which has blank lines (no space) inside functions, I got different behavior from Python 3.6.5 when running the code line by line in interpreter mode and python3 split.py
:
# File split.py
def find(s, start, predictor):
for i in range(start, len(s)):
if predictor(s[i]):
return i
return -1
def find_all(s, sep=" tn"):
beg_of_nonsep = 0
while beg_of_nonsep < len(s):
beg_of_nonsep = find(s, beg_of_nonsep, lambda ch, sep_chs=sep: ch not in sep_chs)
if beg_of_nonsep == -1:
break
end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
if end_of_nonsep == -1:
end_of_nonsep = len(s)
yield (beg_of_nonsep, end_of_nonsep)
beg_of_nonsep = end_of_nonsep + 1
split = lambda s: [s[beg: end] for (beg, end) in find_all(s)]
print(split(""))
print(split(" tn"))
print(split(" tssssn"))
When running the code line by line in interpreter mode, python3
gave me nasty errors:
Type "help", "copyright", "credits" or "license" for more information.
>>> def find(s, start, predictor):
... for i in range(start, len(s)):
... if predictor(s[i]):
... return i
... return -1
...
>>> def find_all(s, sep=" tn"):
... beg_of_nonsep = 0
... while beg_of_nonsep < len(s):
... beg_of_nonsep = find(s, beg_of_nonsep, lambda ch, sep_chs=sep: ch not in sep_chs)
... if beg_of_nonsep == -1:
... break
...
>>> end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
File "<stdin>", line 1
end_of_nonsep = find(s, beg_of_nonsep + 1, lambda ch, sep_chs=sep: ch in sep_chs)
^
IndentationError: unexpected indent
>>> if end_of_nonsep == -1:
File "<stdin>", line 1
if end_of_nonsep == -1:
^
IndentationError: unexpected indent
>>> end_of_nonsep = len(s)
File "<stdin>", line 1
end_of_nonsep = len(s)
^
IndentationError: unexpected indent
>>>
>>> yield (beg_of_nonsep, end_of_nonsep)
File "<stdin>", line 1
yield (beg_of_nonsep, end_of_nonsep)
^
IndentationError: unexpected indent
>>>
>>> beg_of_nonsep = end_of_nonsep + 1
File "<stdin>", line 1
beg_of_nonsep = end_of_nonsep + 1
^
IndentationError: unexpected indent
>>>
>>> split = lambda s: [s[beg: end] for (beg, end) in find_all(s)]
>>>
>>> print(split(""))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'NoneType' object is not iterable
>>> print(split(" tn"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'NoneType' object is not iterable
>>> print(split(" tssssn"))
And the last print
here never quit until I used ctrlc to stop it.
Thus, I thought there were many bugs with my code.
However, when I ran the code with python3 split.py
, none of this happened:
[]
[]
['ssss']
This is rather confusing to me.
To be clear, I was actually using vimcmdline on Debian 9.8 with vim 8.1.
I am also using pylint
through pymode
, which split any trailing space, of which it considered superfluous.
This problem happened when I tried to use its builtin keybinding to send split.py
to the python3
in the tmux
split it opened.
I have already filled an issue, but I can't help wonder why python3
behaves like this.
python
python
edited Apr 22 at 9:56
sepp2k
311k41 gold badges611 silver badges630 bronze badges
311k41 gold badges611 silver badges630 bronze badges
asked Apr 15 at 9:23
JiaHao XuJiaHao Xu
7564 silver badges16 bronze badges
7564 silver badges16 bronze badges
migrated from unix.stackexchange.com Apr 22 at 9:42
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
migrated from unix.stackexchange.com Apr 22 at 9:42
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
migrated from unix.stackexchange.com Apr 22 at 9:42
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
add a comment
|
add a comment
|
1 Answer
1
active
oldest
votes
This behaviour doesn't look surprising to me.
Python uses indentation to determine the beginning and end of a code block. Logically indentation ends on the first line that isn't indented. When running scripts blank lines are ignored. And when running scripts this means that indentation ends either with an un-indented line or the end of file.
But this behaviour cannot work in a command line mode because there is no end of file. Consider the following script file:
from somewhere import bar, do_something
for foo in bar:
do_something(foo)
In a script, the end of the file indicates that it should now run the for loop. It knows there is no more to execute. But in command line mode, the command line is still open, you can still write more. It has no idea whether or not your next line of code is going to be inside or outside the for loop. But the command line cannot just sit and wait for your next line of code... you want it to execute ... now!
Therefore the command line operates with one specific difference. A blank line will also end a code block. So this is fine:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
But this is an error:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
Because you have already ended the for loop with a blank line and cannot add to it.
4
This is a good explanation. It’s worth noting that the interpreter could have been designed such that it always waits for an unindented line, which effectively means that when you want it to “execute…now!” you should type an unindentedpass
. Presumably all this extrapass
ing was deemed more annoying than the incompatibility with the actual language.
– wchargin
Apr 16 at 0:19
add a comment
|
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55792377%2findentationerror-when-pasting-code-in-python-3-interpreter-mode%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
This behaviour doesn't look surprising to me.
Python uses indentation to determine the beginning and end of a code block. Logically indentation ends on the first line that isn't indented. When running scripts blank lines are ignored. And when running scripts this means that indentation ends either with an un-indented line or the end of file.
But this behaviour cannot work in a command line mode because there is no end of file. Consider the following script file:
from somewhere import bar, do_something
for foo in bar:
do_something(foo)
In a script, the end of the file indicates that it should now run the for loop. It knows there is no more to execute. But in command line mode, the command line is still open, you can still write more. It has no idea whether or not your next line of code is going to be inside or outside the for loop. But the command line cannot just sit and wait for your next line of code... you want it to execute ... now!
Therefore the command line operates with one specific difference. A blank line will also end a code block. So this is fine:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
But this is an error:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
Because you have already ended the for loop with a blank line and cannot add to it.
4
This is a good explanation. It’s worth noting that the interpreter could have been designed such that it always waits for an unindented line, which effectively means that when you want it to “execute…now!” you should type an unindentedpass
. Presumably all this extrapass
ing was deemed more annoying than the incompatibility with the actual language.
– wchargin
Apr 16 at 0:19
add a comment
|
This behaviour doesn't look surprising to me.
Python uses indentation to determine the beginning and end of a code block. Logically indentation ends on the first line that isn't indented. When running scripts blank lines are ignored. And when running scripts this means that indentation ends either with an un-indented line or the end of file.
But this behaviour cannot work in a command line mode because there is no end of file. Consider the following script file:
from somewhere import bar, do_something
for foo in bar:
do_something(foo)
In a script, the end of the file indicates that it should now run the for loop. It knows there is no more to execute. But in command line mode, the command line is still open, you can still write more. It has no idea whether or not your next line of code is going to be inside or outside the for loop. But the command line cannot just sit and wait for your next line of code... you want it to execute ... now!
Therefore the command line operates with one specific difference. A blank line will also end a code block. So this is fine:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
But this is an error:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
Because you have already ended the for loop with a blank line and cannot add to it.
4
This is a good explanation. It’s worth noting that the interpreter could have been designed such that it always waits for an unindented line, which effectively means that when you want it to “execute…now!” you should type an unindentedpass
. Presumably all this extrapass
ing was deemed more annoying than the incompatibility with the actual language.
– wchargin
Apr 16 at 0:19
add a comment
|
This behaviour doesn't look surprising to me.
Python uses indentation to determine the beginning and end of a code block. Logically indentation ends on the first line that isn't indented. When running scripts blank lines are ignored. And when running scripts this means that indentation ends either with an un-indented line or the end of file.
But this behaviour cannot work in a command line mode because there is no end of file. Consider the following script file:
from somewhere import bar, do_something
for foo in bar:
do_something(foo)
In a script, the end of the file indicates that it should now run the for loop. It knows there is no more to execute. But in command line mode, the command line is still open, you can still write more. It has no idea whether or not your next line of code is going to be inside or outside the for loop. But the command line cannot just sit and wait for your next line of code... you want it to execute ... now!
Therefore the command line operates with one specific difference. A blank line will also end a code block. So this is fine:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
But this is an error:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
Because you have already ended the for loop with a blank line and cannot add to it.
This behaviour doesn't look surprising to me.
Python uses indentation to determine the beginning and end of a code block. Logically indentation ends on the first line that isn't indented. When running scripts blank lines are ignored. And when running scripts this means that indentation ends either with an un-indented line or the end of file.
But this behaviour cannot work in a command line mode because there is no end of file. Consider the following script file:
from somewhere import bar, do_something
for foo in bar:
do_something(foo)
In a script, the end of the file indicates that it should now run the for loop. It knows there is no more to execute. But in command line mode, the command line is still open, you can still write more. It has no idea whether or not your next line of code is going to be inside or outside the for loop. But the command line cannot just sit and wait for your next line of code... you want it to execute ... now!
Therefore the command line operates with one specific difference. A blank line will also end a code block. So this is fine:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
But this is an error:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
Because you have already ended the for loop with a blank line and cannot add to it.
answered Apr 15 at 9:53
Philip CoulingPhilip Couling
8,0563 gold badges28 silver badges57 bronze badges
8,0563 gold badges28 silver badges57 bronze badges
4
This is a good explanation. It’s worth noting that the interpreter could have been designed such that it always waits for an unindented line, which effectively means that when you want it to “execute…now!” you should type an unindentedpass
. Presumably all this extrapass
ing was deemed more annoying than the incompatibility with the actual language.
– wchargin
Apr 16 at 0:19
add a comment
|
4
This is a good explanation. It’s worth noting that the interpreter could have been designed such that it always waits for an unindented line, which effectively means that when you want it to “execute…now!” you should type an unindentedpass
. Presumably all this extrapass
ing was deemed more annoying than the incompatibility with the actual language.
– wchargin
Apr 16 at 0:19
4
4
This is a good explanation. It’s worth noting that the interpreter could have been designed such that it always waits for an unindented line, which effectively means that when you want it to “execute…now!” you should type an unindented
pass
. Presumably all this extra pass
ing was deemed more annoying than the incompatibility with the actual language.– wchargin
Apr 16 at 0:19
This is a good explanation. It’s worth noting that the interpreter could have been designed such that it always waits for an unindented line, which effectively means that when you want it to “execute…now!” you should type an unindented
pass
. Presumably all this extra pass
ing was deemed more annoying than the incompatibility with the actual language.– wchargin
Apr 16 at 0:19
add a comment
|
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55792377%2findentationerror-when-pasting-code-in-python-3-interpreter-mode%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown