我有一个函数可以判断文件是否在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),那么它将继续循环,直到找到输入文件名
答案 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