- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我运行以下代码时,它在函数内部有空行(没有空格),在解释器模式和 python3 split.py< 中逐行运行代码时,我得到了与 Python 3.6.5 不同的行为
:
# 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=" \t\n"):
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(" \t\n"))
print(split(" \tssss\n"))
在解释器模式下逐行运行代码时,python3
给了我严重的错误:
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=" \t\n"):
... 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(" \t\n"))
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(" \tssss\n"))
最后的 print
永远不会退出,直到我使用 ctrlc 停止它。
因此,我认为我的代码有很多错误。
但是,当我用 python3 split.py
运行代码时,这一切都没有发生:
[]
[]
['ssss']
这让我很困惑。
明确地说,我实际上使用的是 vimcmdline在带有 vim 8.1 的 Debian 9.8 上。
我还通过 pymode
使用 pylint
,它拆分了任何尾随空格,它认为这是多余的。
当我尝试使用它的内置键绑定(bind)将 split.py
发送到打开的 tmux
拆分中的 python3
时,发生了这个问题。
我已经填写了一个 issue ,但我忍不住想知道为什么 python3
会这样。
最佳答案
这种行为对我来说并不奇怪。
Python 使用缩进来确定代码块的开始和结束。逻辑上缩进结束于第一行没有缩进。运行脚本时,空行将被忽略。当运行脚本时,这意味着缩进要么以未缩进的行结束,要么以文件结尾结束。
但是这种行为不能在命令行模式下工作,因为没有文件结尾。考虑以下脚本文件:
from somewhere import bar, do_something
for foo in bar:
do_something(foo)
在脚本中,文件末尾表示它现在应该运行 for 循环。它知道没有更多的执行。但是在命令行模式下,命令行还是开着的,还是可以多写的。它不知道您的下一行代码是在 for 循环内部还是外部。但是命令行不能坐等你的下一行代码……你想让它执行……现在!
因此命令行操作有一个特定的区别。一个空行也将结束一个代码块。所以这很好:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
但这是一个错误:
from somewhere import bar, do_something, do_something_else
for foo in bar:
do_something(foo)
do_something_else(foo)
因为你已经用一个空行结束了for循环,不能再往里面加了。
关于python - 在 Python 3 解释器模式下粘贴代码时出现 IndentationError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55792377/
我的 IndentationError 似乎无法解决。 http://pastebin.com/AFdnYcRc . #!/usr/bin/env python import os import gl
我正在做 Project Euler编程练习的问题,以便自学。我非常了解如何以数学方式解决问题,以及如何以编程方式解决问题。 但是,我必须想出一些疯狂的代码才能做到这一点; 100 个嵌套循环和 Py
我的缩进有什么问题? >>> try: print("Hello World!") except: File "", line 3 except:
这个问题在这里已经有了答案: SyntaxError inconsistency in Python? (2 个答案) 关闭 5 年前。 首先 - 我对缩进错误的代码没有任何问题,我知道这个异常是如
这个问题已经有答案了: 奥 git _a (6 个回答) 已关闭13 小时前。 我正在 Scrapysplash 上编写一个蜘蛛,我开始收到此错误: File "C:\Users\Name\Pycha
下面是我的全部代码。尝试执行它时,我不断收到错误消息 File "/Users/thomas/prac.py", line 15 elif choice == "1": IndentationEr
这个问题在这里已经有了答案: IndentationError: unindent does not match any outer indentation level (31 个答案) 关闭 2
这个问题在这里已经有了答案: I'm getting an IndentationError. How do I fix it? (6 个答案) 关闭去年。 我有这样的代码 # -*- coding
下面的代码真的让我很烦 我已经查看了 stackoverflow 和谷歌但没有找到任何东西而且我是一个非常好的 pyton 程序员并且到目前为止还没有发现我无法处理的错误.我已经尝试了所有方法,但这种
我有一个简单的问题, IndentationError 是 Python 中的 SyntaxError 吗? 我认为不是,但由于我是初学者,所以我想确定一下。语法错误只是那些给我 SyntaxErro
为什么在下面的程序中引发的是 IndentationError 而不是 SyntaxError? >>> if True: ... print "just right!" File "", lin
python出现"IndentationError: unexpected indent"错误解决办法 Python是一种对缩进非常敏感的语言,最常见的情况是tab和空格的混用
我的程序很简单,我打算制作一个控制台应用程序,在其中可以通过乌龟通过“left_star”,“left_circle” ext之类的命令使用Turtle绘制一些艺术品。当我尝试实现更新时,由于某种原因
这是我的程序,我收到以下提到的错误: def main(): print "hello" if __name__=='__main__': main() 错误 File "hello.py
当我运行以下代码时,它在函数内部有空行(没有空格),在解释器模式和 python3 split.py>> def find(s, start, predictor): ... for i in
这个问题在这里已经有了答案: IndentationError: unindent does not match any outer indentation level (30 个回答) 关闭 4 年
这个问题在这里已经有了答案: I'm getting an IndentationError. How do I fix it? (6 个答案) 关闭 4 年前。 我的 python 代码有问题。我
我使用 Sentinel2 图像并尝试对它们重新采样。 我尝试了以下代码: import os, fnmatch INPUT_FOLDER = "/d/afavro/Bureau/test_resam
我是 Python 的新手,所以请怜悯我。我的环境是: macOS Sierra 10.12.4 and Anaconda 4.3.16 我必须遵循以下代码: import os, import
This question already has answers here: I'm getting an IndentationError. How do I fix it? (4个答案) 5个月
我是一名优秀的程序员,十分优秀!