Недавно я работал над кодом и несколько дней застревал на этой ошибке. В основном, программа принимает текст HTML студентов и преобразует его в таблицу, созданную с помощью DJANGO. Раньше программа работала без проблем, но после недавних школьных изменений в файле HTML Transcript для учащихся она выдает ошибку:
Значение исключения: "Не удалось преобразовать строку в число с плавающей точкой: C ExceptionLocation C: \ Users \ CMPS \ Desktop \ AdvisementSystem \ program \ src \ myproject \ myproject \ myapp \ extractData.py в splitTR, строка 14
Номера курсов для всех переключенных курсов Например, CMPS190 был изменен на CMPS190B, а ENG201 теперь является ENG201B.
Как я могу настроить код, чтобы прочитать, что "B" соответствует номеру курса? Код ниже:
from bs4 import BeautifulSoup
from CourseGrade import *
def splitTr(tr, grade):
grade.department = tr.find_all('td')[0].text.lstrip()
grade.course_num = tr.find_all('td')[1].text
if tr.find_all('td')[2].text == "UG" or tr.find_all('td')[2].text == "GR":
grade.course_title = tr.find_all('td')[3].text
grade.grade = tr.find_all('td')[4].text.lstrip()
grade.creditHour = int(float(tr.find_all('td')[5].text.lstrip()))
else :
grade.course_title = tr.find_all('td')[2].text
grade.grade = tr.find_all('td')[3].text.lstrip()
grade.creditHour = int(float(tr.find_all('td')[4].text.lstrip()))
def getDataList(student, fileName="Academic Transcript.html"):
file = open(fileName,'r')
soup = BeautifulSoup(file,"html.parser")
studentName = soup.find("a", {"name":"Student Address"})
if studentName != None:
student.name = studentName.contents[0]
else:
studentName = soup.find("div","staticheaders").contents[0]
student.name = studentName.split()[1]+ " " + studentName.split()[2]
print(soup.find('td',attrs={'class':'dddefault','colspan':6}).contents[0])
table = soup.find('table',attrs={'class':'datadisplaytable'})
# print(table)
# table_body = table.findAll('tbody')
# print(table_body)
trs = table.find_all('tr')
count = 0
term = ''
department = ''
course_title = ''
grade = ''
for tr in trs:
if tr.find('span',attrs={'class':'fieldOrangetextbold'}):
term = tr.span.text
term = term.replace(":", "")
term = term.replace("Term", "").lstrip()
continue
if tr.find('td',attrs={'class':'dddefault','colspan':4}) or tr.find('td',attrs={'class':'dddefault','colspan':5}):
grade = CourseGrade()
splitTr(tr, grade)
grade.semester_completed = term
appendValidData(student, grade)
count = count + 1
def appendValidData(student, grade):
if grade.grade == 'A':
student.gradeList.append(grade)
if grade.grade == 'B':
student.gradeList.append(grade)
if grade.grade == 'C':
student.gradeList.append(grade)
if grade.grade == 'P':
student.gradeList.append(grade)
if grade.grade == 'TA':
student.gradeList.append(grade)
if grade.grade == 'TB':
student.gradeList.append(grade)
if grade.grade == 'TC':
student.gradeList.append(grade)
if grade.grade == 'TP':
student.gradeList.append(grade)
def fillData(student,courseT):
for grade in student.gradeList:
gradeId = grade.department + grade.course_num
if gradeId == courseT.courseId :
courseT.grade = grade.grade
if grade.semester_completed != "":
strList = grade.semester_completed.split(' ',3)
courseT.semester = strList[0]
if len(strList)>1:
courseT.year = strList[1]
else :
courseT.year = strList[0]
grade.isListed = True