0

我被困在这个问题上。到目前为止我的代码有效,但我的教授希望看到一些变化。我需要添加错误处理,我需要一个单独的函数来计算我将在 main.js 中调用的平均值。这是我到目前为止所拥有的...

import os

def process_file(filename):
    f = open(filename,'r')
    lines = f.readlines()[1:]
    f.close()

    scores = []

    for line in lines:
        parsed = line.split(",")
        count = int(parsed[1])
        scores.append(count)

    calculate_result(scores)

def calculate_result(scores):
    print("High: ", max(scores))
    print("Low: ", min(scores))
    print("Average: ", sum(scores)/len(scores))


def main():
    filename = "scores.text"
    if os.path.isfile(filename):
        process_file(filename)
    else:
        print ("File does not exist")
        return 0


main()
4

1 回答 1

0

我想有2个部分:

我需要添加错误处理

我需要一个单独的函数来计算我将在 main 中调用的平均值

第二部分我认为你不需要帮助。但是错误处理是一种艺术,所以我可以看到你可能会被困在哪里。以下是一些帮助入门的建议。

最常见的错误处理类型涉及处理输入。从更广泛的角度考虑,我们可以将其扩展到跨越程序内存空间边界的任何内容。这不仅包括用户输入,还包括输出;文件系统交互;使用网络接口(或任何通信设备或硬件接口);启动/停止或以其他方式与其他程序交互;调用一个代表我们做这些事情的图书馆;还有很多....

那么您的程序的哪些部分与“外部”交互?我可以看到一些:

  1. main()程序中假设文件的存在。您已经在检查以确保此文件存在,0如果不存在则返回(您可能希望将其更改为非零值,因为0通常用于表示未发生错误)
  2. process_file()这样做:f = open(filename,'r')但你确定这会奏效吗?是否存在可能失败的条件?
    • 如果运行程序的用户没有读取该文件的权限怎么办?
    • 如果文件在签入main和随后的open调用之间被删除或更改process_file怎么办?这是一个TOCTOU 竞争条件,是每个软件开发人员都需要注意的事情。
  3. 该程序潜在错误的最明显来源可能是输入文件的内容:
    • 我们假设输入是逗号分隔的。如果用户使用制表符或其他字符怎么办?
    • 在处理这些行时,你得到了:count = int(parsed[1]),但是你怎么知道parsed[1]可以转换成一个int
    • 如果文件存在但为空(提示:),会发生什么len(scores)==0?始终查看这些边缘情况。

最后,看起来您正在使用if-then语句进行错误检查。这很好,但是另一个处理错误的强大工具是try-except语句。它们不是相互排斥的:有时使用if语句更容易,有时捕获异常try-except更好。使用一种方法比另一种方法更容易处理您需要处理的一些错误。

于 2020-04-28T00:27:01.720 回答