您好我是python新手,我正在使用python工作NLP。我在写python中的if-else块时遇到错误。当我写作时,只有当时阻止它正常工作:
if xyzzy.endswith('l'):
print xyzzy
进入冒号后我按下回车键,它会自动将我带到正确的缩进处。
但是当我在print语句后按“Enter”键后尝试添加else块时, 它正在考虑它只是IF块的声明,所以它给了我不正确的缩进,因为我想要阻止之后,而当我试图写其他阻止我自己它给我这个错误。
else:
^
IndentationError: unexpected indent
那么在写完print语句后我该怎么办?输入显然不起作用,因为它正在向前移动光标,而当我使用空格来到正确的指针时它会给我一个错误。
答案 0 :(得分:5)
很难从帖子中看到问题所在,但if-else
的格式是这样的
if someCondition:
do_something # could be a single statement, or a series of statements
else:
do_something_else # could be a single statement, or a series of statements
即,else
需要与相应的if
处于相同的级别。
在if
和Python doc/tutorial上见other tutorial。
有时当你的编辑器为你自动编辑并且你手动编辑时,事情可能会搞砸,所以你必须弄清楚你的编辑器如何处理缩进(例如,它总是使用tabs
或空格? ,如果你点击返回等会发生什么。)
此外,要警惕混合制表符和空格,这也会导致问题(很难发现,因为两者都是“看不见的”)
使用您更新的帖子:
if xyzzy.endswith('l'):
print xyzzy
else:
something_else
答案 1 :(得分:2)
缩进正确并不是Python的问题,而是您用于源代码的编辑器的问题。
大多数了解Python的编辑器会在冒号后正确添加一级缩进(如您所见)。因为您可以在该代码块中拥有任意数量的语句,编辑器无法知道何时“突出”else
的下一行。
在开始输入之前,你必须通过点击行上的退格或换档标签告诉编辑器这个行。
如果在编写其余代码后插入else
部分,请确保用于缩进的字符与if
语句的字符相同。如果if
语句使用空格缩进,请为else
使用相同数量的空格。如果使用一个或多个选项卡缩进if
语句,请对else
语句使用相同数量的选项卡。不要混合使用空格和制表符进行缩进。
不要以为只是因为线条“看起来”就像它们缩进一样,它们 缩进相同。可以使用空格,也可以使用制表符(或某些组合)。
答案 2 :(得分:1)
else
应与与之耦合的if
处于同一缩进级别:
if x:
# do something
else:
# do something else
在你的情况下,
if xyzzy.endswith('l'):
print xyzzy
else:
# something else
即使您的编辑器是自动缩进的,您仍然应该取消缩进以使代码在语法上正确。
答案 3 :(得分:1)
" - 当我使用空间来找到正确的指针时,它会给我一个错误" 当然。使用空间永远不会产生"换行",通常这在Unix系统中是\ n。如果您在其他编辑器(例如Windows中的记事本)中打开.py文件,您会发现您的else语句与print相同。
" - 输入显然不起作用,因为它正在向前推进 - " 按退格键正确的时间以达到与IF语句相同的缩进级别。
答案 4 :(得分:1)
我完全同意接受的答案。是的,indention在Python中非常重要,但要声明if-else
必须始终看起来像这种格式有点过分。
Python只允许你在if
,elif
或{{1}
以下是一些例子:
else
通常不建议在一行中包含太多语句,因为这样你就失去了Python的一个重要特性 - 代码的可读性。
另请注意,上述示例也可以轻松应用于choice = 1
# if with one-liner
if choice == 1: print('This is choice 1')
# if-else with one-liners
if choice == 1: print('This is choice 1')
else: print('This is a choice other than 1')
# if-else if with one-liners
if choice == 1: print('This is choice 1')
elif choice == 2: print('This is choice 2')
# if-else if-else with one-liners
if choice == 1: print('This is choice 1')
elif choice == 2: print('This is choice 2')
else: print('This is a choice other than 1 and 2')
# Multiple simple statements on a single line have to be separated by a semicolumn (;) except for the last one on the line
if choice == 1: print('First statement'); print('Second statement'); print('Third statement')
和for
。如果使用三元条件运算符,您可以更进一步做一些while
块的疯狂嵌套。
以下是运营商的看法:
if
这样做基本上是创建一个简单的flag = True
print('Flag is set to %s' % ('AWESOME' if True else 'BORING'))
语句。如果你需要更多的分支(但不是复杂的分支),你可以用一个单行器嵌入它。
希望这可以澄清一下情况,允许和不允许的情况。 ;)
答案 5 :(得分:0)
即使缩进看起来正确,我也收到了这个错误。 在Notepad ++中查看,可以选择查看空格和制表符。该错误是由混合空格和制表符以创建缩进引起的。 用每行中的空格替换Tabs有助于消除错误。
答案 6 :(得分:0)