Python 中的 try、 except、 else 块出现缩进错误 [重复]

问题描述 投票:0回答:1

进一步回答我在here提出的问题,我一直在解决错误异常。 我已经从另一个文件中读取了文件列表,但如果引用的文件之一不存在,我会遇到困难。 我希望能够识别错误,通过电子邮件发送出去,然后创建文件以供以后使用。 但是,我放入的“try、 except、 else”块出现缩进错误。 看起来它应该可以工作,但我就是无法让它运行! 嘎!帮忙!!!

日志文本文件包含以下内容:

//server-1/data/instances/devapp/log/audit.log

//server-1/data/instances/devapp/log/bizman.db.log

//server-1/data/instances/devapp/log/foo.txt # 服务器上不存在该文件

我的代码如下。我认为最好将其完整发布而不是片段,以防程序中较早的内容导致它崩溃!

import os, datetime, smtplib
today = datetime.datetime.now().strftime('%Y-%m-%d')
time_a = datetime.datetime.now().strftime('%Y%m%d %H-%M-%S')
checkdir = '/cygdrive/c/bob/python_'+ datetime.datetime.now().strftime('%Y-%m-%d')+'_test'
logdir = '/cygdrive/c/bob/logs.txt'
errors = '/cygdrive/c/bob/errors.txt'

#email stuff
sender = '[email protected]'
receivers = '[email protected]'
message_1 = """From: errors <[email protected]>
To: Bob <[email protected]>
Subject: Log file not found on server

A log file has not been found for the automated check. 
The file has now been created.
""" 
#end of email stuff


try:
                os.chdir (checkdir) # Try opening the recording log directory    
except (OSError, IOError), e: # If it fails then :
                os.mkdir (checkdir)  #  Make the new directory
                os.chdir (checkdir)  #  Change to the new directory
                log = open ('test_log.txt', 'a+w') #Create and open log file
else :
                log = open ('test_log.txt', 'a+w') #Open log file

log.write ("***starting file check at %s  ***\r\n\r\n"%tme_a)

def log_opener (logdir) :
    with open(logdir) as log_lines:  #open the file with the log paths in
        for line in log_lines:  # for each log path do :
            timestamp = time_a + ('  Checking ') + line + ( '\r\n' )
            try:
                with open(line.strip()) as logs:
            except (OSError,IOError), e:
                try:
                smtpObj = smtplib.SMTP('localhost')
                smtpObj.sendmail(sender, receivers, message)         
                log.write (timestamp)
                log.write ("Log file not found.  Email sent.  New file created.")
            except SMTPException:
                log.write (timestamp)
                log.write ("Log file not found.  Unable to send email.  New file created.")
            
        else :  #  The following is just to see if there is any output...  More stuff to be added here!
            
            print line + ( '\r\n' )
            log.write (timestamp)
            print "".join(logs.readlines())
            
print log_opener(logdir)

我收到的错误如下:

$ python log_5.py
  File "log_5.py", line 38
    except (OSError,IOError), e:
    ^
IndentationError: expected an indented block

据我所知,它应该有效,但是......

作为补充说明,我学习的时间不长,所以我的很多代码都是从各种教程中修改的,或者从这里或网络上的其他地方借用的。 我可能在这里犯了一个非常基本的错误,所以请容忍我!

非常感谢您的帮助!

python indentation ioerror
1个回答
6
投票

此行下没有代码块:

with open(line.strip()) as logs:

try:
def ...:
with ...:
for ...:
这样的每一行都需要在其下方有一个缩进的代码块。

在回答您的评论时,您可能希望将代码分解为更小的函数,以使事情更清晰。所以你有这样的东西:

def sendEmail(...):
    try:
        smtpObj = smtplib.SMTP('localhost')
        ...
    except SMTPException:
        ...

def log_opener(...):
    try:
        with open(line.strip()) as logs:
            sendEmail(...)
    except (OSError,IOError), e:
        ....

这样,

try
except
之间就不会出现很多线条,并且可以避免嵌套
try/except
块。

© www.soinside.com 2019 - 2024. All rights reserved.