如果函数为false,请尝试/除外

时间:2016-03-02 17:43:23

标签: python exception try-catch

我有一个函数可以判断文件是否在n×n方阵中,即3x3或4x4。现在,如果我调用该函数,它可以正常工作;它表示它是否是一个nxn平方。

我的问题是我想使用异常,如果函数返回False值,那么它将不会加载文本文件但是会提示错误,以确保文件具有nxn网格。 因此,例如,如果我将网格存储在文本文件中,我尝试使用python代码加载它;程序应该保持循环,直到文件格式正确。我不确定函数boolean

是否有异常
ABC
DEF
GHI
J

目前我有

def grid(n):
    rows = len(n)
    for row in n:
        if len(row) != rows:
            return False   

类似于文件打开的方式;如果它不存在(FileNotFoundError),那么它将继续循环,直到找到输入文件名

2 个答案:

答案 0 :(得分:1)

这是一种方法。如果square(d)返回False,则只需提出相应的例外情况。

#Return True if sq is square, False otherwise
def square(sq):
    rows = len(sq)
    return all(len(row) == rows for row in sq)

def loaddata():
    while True:
        try:
            filename = input("Enter the name of the file to open: ") + ".txt"
            with open(filename, "r") as f:
                d = []
                for line in f:
                    splitLine = line.split()
                    d.append(splitLine)

            if not square(d):
                raise ValueError

            break

        except FileNotFoundError:
            print("File name does not exist; please try again")
        except ValueError:
            print("The format is incorrect")

    for line in d:
        print("".join(line)) 

我们每次通过循环将d重置为[],以防我们需要删除前一个非正方形文件的内容。

答案 1 :(得分:0)

你把这个异常(“除外”声明)与提出异常一起混淆了。你应该在square中做什么是引发异常而不是返回false然后在你的主程序中处理它:

def square(sq):
    rows = len(sq)
    for row in sq:
        if len(row) != rows:
            raise ValueError("the format is incorrect") 


def loaddata():
    while True:
        try:
            filename=input("Enter the name of the file to open: ") + ".txt"
            with open(filename,"r") as f:
                for line in f:
                    splitLine=line.split()
                    d.append(splitLine)
                break
            square(d)

        except FileNotFoundError:
            print("File name does not exist; please try again")     

        except ValueError:
                print("The format is incorrect")

    for line in d:
        print("".join(line))   
    return