这个python脚本有什么问题?

时间:2011-04-15 20:40:28

标签: python

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()之后的行总是在编译时出错。 编译时出错:

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

我尝试过空格,不同的命令,新的空行。这些都没有解决它。

3 个答案:

答案 0 :(得分:5)

您的except需要finallytry个阻止。

如果您在发生异常时不想做任何事情,只需将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

答案 1 :(得分:1)

您必须在同一选项卡级别使用catch或finally块跟随try块

答案 2 :(得分:0)

删除try:语句,因为它没有做任何事情。

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:块,因为这可能会让你相信已经完成的事情已经失败了。

此外,您的下一个语句将失败,好像RAM==""然后float(RAM)会引发ValueError。这可能是您的问题的缩进问题,但它应该看起来像:

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