2011-04-15 178 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?")