【发布时间】:2019-09-25 18:27:44
【问题描述】:
我正在从文件中读取分数列表,并将它们解析为元组列表。如果文件为空或分母小于等于 0,我希望发生错误。
我尝试将if(EOFERRor)、elif(zerodivisionerror)、elif(assertionerror)、else.. 放在InvalidFile(Exception) 类中。在我的异常会在文件读取结束时引发之前,这就是我专门将其包含在其中的原因。
我的猜测是 EOF 与除以零同时发生,但我将列表与文件分开以防止这种情况发生
class InvalidFile(Exception):
if(EOFError):
pass
else:
print('Invalid file format')
sys.exit(1)
def createFractionList(filePath):
try:
f = open(inFile)
f.close()
except FileNotFoundError:
print('FileNotFoundError')
sys.exit(1)
fractionList = []
for line in open(filePath):
line = line.rstrip()
try:
numerator, denominator = tuple(int(x) for x in line.split())
except:
raise InvalidFile
fractionList.append((numerator, denominator))
for lists in fractionList:
try:
lists[0]/lists[1]
except:
raise InvalidFile
return fractionList
dateList = createFractionList(inFile)
print(dateList)
输入:
1 0
3 4
5 6
7 8
9 10
0 8
2 4
9 12
20 24
35 40
54 60
预期输出:
Invalid file format
实际输出:
C:\Users\Xavier\PycharmProjects\hw4\venv\Scripts\python.exe C:/Users/Xavier/PycharmProjects/hw4/hw4.py
Traceback (most recent call last):
File "C:/Users/Xavier/PycharmProjects/hw4/hw4.py", line 33, in createFractionList
lists[1]/0
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
【问题讨论】:
-
如何调用代码?
except:是不好的做法;你应该例如except ValueError:或您真正想要捕获的任何异常。 -
请问您,为什么要这样做“lists[1]/0”?
-
@hiroprotagonist 我以前有它:assert 1 / denominator except AssertionError: 但我把它拿出来是因为我不确定这是否是原因。我添加了我如何调用代码
-
@TonyJafar lists[1] / 0 是引用创建的元组的第二个值,即分母。
-
所以你的意思是写
lists[1] / lists[0](或者反过来?)
标签: python-3.x exception try-catch