【问题标题】:Code issue - file opening代码问题 - 文件打开
【发布时间】:2015-03-04 21:41:34
【问题描述】:

我正在尝试定义一个函数,该函数应该使用给定名称打开文件,在屏幕上显示其内容,一次三个字符,然后关闭文件。如果使用无效的文件名调用此版本函数,它应该会崩溃。但是,我认为我的代码中存在一个错误,导致它在没有运行该函数的情况下崩溃。

这是我目前的代码:

def trigram_printer(filename):
    """str -> none"""
    print("Please enter a filename: ")
    filename = input("> ")
    while True:
        try:
            file = open(filename)
            for line in file:
                print(line)
            file.close()
            break
        except IOError:
            print("There was a problem accessing file '" + filename + "'." + \
                  "Please enter a different filename.")
            filename = input(">")

对于错误消息,我实际上得到了“访问文件'时出现问题”+文件名+“'”。 + \ “请输入一个不同的文件名。”......所以我认为它可能至少有一点作用。如果可以,请帮助我...

【问题讨论】:

  • 缩进,你需要在函数的范围内格式化你的代码。
  • 好吧,如果您遇到 IOError,请查看堆栈跟踪并查看原始错误是什么。或者,如果它没有出现,则引发异常而不是捕获它。
  • 为什么要将参数文件名传递给函数,然后将输入输入到文件名变量。您可能正在覆盖它。
  • except IOError as e: print(e) 将提供更多信息,因为 ThePavolC 已评论传递您从未使用过的 arg 是多余的,如果您想使用您传入的文件名,请删除第一个输入
  • 这个函数到底应该做什么?你想让用户输入文件名,然后你想打印出文件的内容,然后从函数返回?

标签: python python-3.x


【解决方案1】:

您正在覆盖传递给函数的文件名参数,并且您正在向用户询问文件名,因此根本不需要。

正如heifzhan 提到的,您不应该使用文件,因为它是内置的,但在 Python 3 中这不是问题。 See here

关于你的任务,我会:

  1. 求文件名
  2. 打开文件
  3. 读取 3 个字符而 read() 不会返回 ""
  4. 打印 3 个字符,或者做任何你想做的事情
  5. 返回

这是我的例子:

def trigram_printer2():
    """str -> none"""
    print("Please enter a filename: ")
    filename = input("> ")
    try:
        opened_file = open(filename)
        three_chars = opened_file.read(3)
        while three_chars != "":
            three_chars = opened_file.read(3)
            print (three_chars)
        opened_file.close()
    except IOError:
        print("There was a problem accessing file '" + filename + "'." + \
              "Please enter a different filename.")

【讨论】:

    【解决方案2】:

    你必须缩进所有函数体。

    def trigram_printer(filename):
      """str -> none"""
      print("Please enter a filename: ")
      filename = input("> ")
      while True:
        try:
            file = open(filename)
            for line in file:
                print(line)
            file.close()
            break
        except IOError:
            print("There was a problem accessing file '" + filename + "'." + \
                  "Please enter a different filename.")
            filename = input(">")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多