2011-04-15 137 views
0
RAM=open('/root/arg2', 'r').read() 
if RAM=="": 
     try: 
      if not sys.argv[2]=="": 
       f = open("/root/arg2","a") 
       f.write(sys.argv[2]) 
       f.close() 
    if float(RAM) > 4096: 
     os.system("echo What the hell?") 

上面的脚本有什么问题?编译时,f.close()后面的行总是出错。从编译 错误:这个python脚本有什么问题?

[email protected]:~/scripts$ python -m compileall * 
Compiling thatscript.py ... 
Sorry: IndentationError: ('unexpected unindent', ('thatscript.py', 20, 1, '\tif float(RAM) > 4096:\n')) 

我已经尝试的空间,不同的命令,新的空行。没有一个解决了它。

+1

此错误是说,蟒蛇不知道为什么与'如果float'只缩进4个空格就行了。这就像在其他语言中使用额外的大括号。将if:块放置在与try相同的缩进级别:您将看到一个新的错误,这将帮助您一路走来。 – kevpie 2011-04-15 20:55:26

回答

5

您需要为您的try设置exceptfinally区块。

如果您不想在异常情况下执行任何操作,只需将pass放入其中即可。

try: 
     if not sys.argv[2]=="": 
      f = open("/root/arg2","a") 
      f.write(sys.argv[2]) 
      f.close() 
    except: 
     pass 

未能有该程序可能会导致IndentationError您遇到:

try: 
    foo = 1 
    bar = 2 
    baz = 3 

    File "<pyshell#13>", line 5 
    baz = 3 
     ^
IndentationError: unindent does not match any outer indentation level 
+0

虽然这是OP的问题之一,但并不是他问这个问题的人,所以也没有回答他的问题。你根本没有提到他的缩进错误。 – John 2011-04-15 21:31:14

+0

缺失'except' /'finally' block **是**缩进错误。你不能仅仅在没有相应的'except' /'finally'块的情况下减去'try'块,否则它会抛出这个错误。 – 2011-04-15 21:50:14

+0

我意识到,但还有另一个你不说的错误。根据我的口译员(v2&v3),你的代码会抛出与他一样的错误。这个其他的错误是由于他的'if float(RAM)> 4096:'行的缩进级太小而不能在函数中,太大而不能被移出。 – John 2011-04-15 22:33:15

1

您必须遵守try块与catch或finally在同一标签水平

+0

你能举个例子吗? – Riki137 2011-04-15 20:51:22

+0

我应该在f.close()之后放置什么? – Riki137 2011-04-15 20:51:42

+0

把它解决了!谢谢! – Riki137 2011-04-15 20:57:00

0

去除块声明,因为它没有做任何事情。

RAM=open('/root/arg2', 'r').read() 
if RAM=="": 
    if not sys.argv[2]=="": 
     f = open("/root/arg2","a") 
     f.write(sys.argv[2]) 
     f.close() 

也有人说这太,但我会谨慎只用一个空except:块的,因为这可能导致您认为事情已经做过了INFACT失败。

此外,你的下一个陈述将失败,好像RAM==""然后float(RAM)将提高ValueError。这可能是一个缺口问题,你的问题,但它可能应该是这个样子:

if RAM=="": 
    #Your sys.argv bit here 
elif float(RAM) > 4096: 
    os.system("echo What the hell?")