Python文件复制异常捕获

时间:2013-12-23 16:24:29

标签: python file exception-handling

我有一个名为test.txt的txt文件,里面有4行。我想从命令行参数将包含单词'exception'的行复制到一个新文件中。我做到了这一点。但我也想异常处理这个IO错误。也就是说,如果从命令行开始,有人拼错了单词test.txt,它会抛出一个异常。这是我目前的代码。请帮忙!我是初学者。目前,如果我故意拼错它,它没有显示我打算显示的错误信息。

import sys


def Cat(filename):
     try:
      f = open(filename, 'rU')
      for line in f:
       print (line),
       return 3
     except IOError:
       print('\nIO error!!', filename)

def main():
  f1 = open(sys.argv[1])
  f2 = open(sys.argv[2], 'w')
  for line in f1:    
    if 'exception' in line:
       f2.write(line)




if __name__ == '__main__':
  main()

4 个答案:

答案 0 :(得分:0)

您需要将open()放在try - except块中,就像在Cat()中一样。

目前,您没有致电Cat()open()中的main()不在try - except区块内。

答案 1 :(得分:0)

既然你说你是Python的初学者,我会假设这是一种“学习代码”。所以,我不会告诉你有关设计的任何信息。另外,你应该做@NPE所说的。

您可以在main功能中尝试此功能,以实现目标:

def main():

    filename = open(sys.argv[1])
    if filename != "test.txt":
        raise Exception("Here goes the message error you want to show")
    f2 = open(sys.argv[2], 'w')
    for line in f1:    
        if 'exception' in line:
           f2.write(line)

答案 2 :(得分:0)

首先检查源文件是否存在且可读 -

if not (os.path.exists(file1) and os.access(file1, os.R_OK)):
   print "file1 does not exists or not readable"
   sys.exit(1)
else:
   //good to go

然后使用try除了块来处理目标文件的写入。

答案 3 :(得分:0)

你忘了打电话给Cat()

之前

f2 = open(sys.argv[2], 'w')
Cat(f1)
for line in f1:  

在Cat函数中,您需要引发异常以停止执行

print('\nIO error!!', filename)
raise IOError('Invalid filename')