【问题标题】:Python file copy exception catchingPython文件复制异常捕获
【发布时间】:2013-12-23 16:24:29
【问题描述】:

我有一个名为 test.txt 的 txt 文件,其中有 4 行。我想将包含“异常”一词的行从命令行参数复制到一个新文件中。我已经做到了这一点。但我也想对 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()

【问题讨论】:

  • 请同时修正你的缩进——你所有的 Python 代码应该对每个块级别使用相同数量的缩进,因为你使用 1、2 和 4 个空格的组合。 4 个空格是标准的,但一致性更重要(至少使用 1 个以上)。

标签: python file exception-handling


【解决方案1】:

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

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 except 块处理目标文件的写入。

【讨论】:

    【解决方案2】:

    您需要将open() 放入try-except 块中,就像您在Cat() 中所做的那样。

    目前,您没有调用Cat(),并且main() 中的open() 不在try-except 块内。

    【讨论】:

      【解决方案3】:

      既然你说你是 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)
      

      【讨论】:

        【解决方案4】:

        你忘了调用 Cat()

        之前

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

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

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

        【讨论】:

        • 另外,尝试使用"with" 语句打开文件。理想情况下,您希望在发生错误时关闭文件连接。
        猜你喜欢
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-17
        • 2019-01-13
        • 2011-06-09
        相关资源
        最近更新 更多