Bob*_*ard 1 python indentation ioerror
对于我在这里问的一个问题,我很难解决错误异常.我已经整理出从另一个文件中读取文件列表,但是如果引用的其中一个文件不存在,我就会挣扎.我希望能够识别错误,发送电子邮件,然后创建该文件供以后使用.但是,我正在为"我正在尝试的"尝试,除了,"块"收到缩进错误.它看起来应该可以正常工作,但我无法让它运行!尔加!救命!!!
日志文本文件包含以下内容:
//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 = 'errors@company.com'
receivers = 'bob@company.com'
message_1 = """From: errors <errors@company.com>
To: Bob <bob@company.com>
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)
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
$ python log_5.py
File "log_5.py", line 38
except (OSError,IOError), e:
^
IndentationError: expected an indented block
Run Code Online (Sandbox Code Playgroud)
据我所知,它应该工作,但......
另外需要注意的是,我的学习时间并不多,所以我的很多代码都是从各种教程中修改过来的,或者是从这里或网上的其他地方借来的.我可能在这里犯了一个非常基本的错误,所以请耐心等待我!
非常感谢您的帮助!
此行下没有代码块:
with open(line.strip()) as logs:
Run Code Online (Sandbox Code Playgroud)
每一行像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:
....
Run Code Online (Sandbox Code Playgroud)
这样,你try和它之间永远不会有很多行except,并且你避免使用嵌套try/except块.
| 归档时间: |
|
| 查看次数: |
8405 次 |
| 最近记录: |