2015-08-03 313 views
2

我正在使用继承的Python程序,该程序运行正常,但没有正确的Python缩进。Python if语句无缩进

if not arg_o: 
print >> sys.stderr, 'Output file needed.' 
print >> sys.stderr, usage 
exit() 

这是怎么回事?如果缩进,以下的代码不应该缩进吗?

解决

见接受的答案。事实证明,TextMate没有正确显示标签,这是一个担心。当在Vim中打开时,它被正确缩进。

+0

当你试图运行它时,你没有得到一个错误吗? – putvande

+1

你确定这是Python代码?什么是“>>”? –

+0

程序运行并产生输出。我不知道是否涉及到这个分支。在我尝试重构它之前,我想了解它如何工作。 – ardochhigh

回答

8

检查文件 - MPprimer.py - 从代码找到here

我可以看到以下行吧 -

if not arg_o: 
    print >> sys.stderr, 'Output file needed.' 
    print >> sys.stderr, usage 
    exit() 

始于线175。问题是这个脚本混合了制表符和空格。

175行 - if not arg_o: - 使用4个空格作为缩进。

而下一行第176行 - print >> sys.stderr, 'Output file needed.' - 使用制表符作为缩进。

在Python 2.x中,制表符和空格可以混合使用,但制表符由8个空格内部表示。

但是在某些编辑器(如Notepad ++,在我的系统中)中,选项卡仅被解释为4个空格。所以即使在这些编辑器中,他们看起来好像没有正确缩进,但根据python的说法,它们实际上是正确缩进的。

请注意,如果您将它们混合在同一个脚本中,混合制表符和空格,Python 3.x将不会出错。

+0

感谢您花时间检查。我只看到每一行的标签。我正在使用TextMate。 – ardochhigh

+1

检入其他编辑器。 –

+0

你是对的!在Linux上的Vim上打开它看起来很好。非常感谢你解决这个问题。 – ardochhigh

0

Python documentation说这是不正确的。它应该是这样的:

if not arg_o: 
    print >> sys.stderr, 'Output file needed.' 
    print >> sys.stderr, usage 
exit() 

也许你的输出来自另一部分的代码。

+0

那不是问题。 – putvande

+2

OP询问代码*如何工作*。不是如何解决它 - 它已经修复了......显然。 –

-1

Python的缩进需要4个空格,所以如果以后如果要有4个空格

而且打印>>的整块似乎并没有被Python代码,以便参考https://docs.python.org/2.7/tutorial/introduction.html

+3

它不需要_four_,它只需要_some_。四是公约,但这不是要求。 –

+1

['print >>'是有效的Python 2代码。](https://docs.python.org/2.7/reference/simple_stmts.html#the-print-statement)它用于指定要打印的文件句柄。 – jwodder

1

在你的情况下, if之前的空格是4个空格,在print之前是空格。您的编辑器可能会将选项卡显示为Python解释它的其他内容。

0

是你的问题的简短答案是If语句后面的代码应该缩进以适应python的缩进。