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'))
我尝试过空格,不同的命令,新的空行。这些都没有解决它。
答案 0 :(得分:5)
您的except
需要finally
或try
个阻止。
如果您在发生异常时不想做任何事情,只需将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?")