(continued from previous page with open (filename' 'as frows csv reader(fheader next(rowsskip the header change the types of the columns for row in rowstryrow[ float(row[ ]radius row[ float(row[ ]price row[ int(row[ ]quantity generalized conversion row [d_type(valfor d_typeval in zip(typesrow)except valueerror as errprocess value error only if mode ='warn'print("invalid datarow is skipped"print('row{}reason {}format(row_numerr)elif mode ='silent'pass do nothing elif mode ='stop'raise raise the exception continue ring_data append(tuple(row) append data in list in the form of tuple row_dict 'daterow[ ]'metalrow[ ]'radiusrow[ ]'pricerow[ ]'quantityrow[ row_dict ring(row[ ]row[ ]row[ ]row[ ]row[ ]use below or above line row_dict ringdate row[ ]metal row[ ]radius row[ ]price row[ ]quantity row[ ring_data append(row_dict return ring_data table formatter def print_table(list_namecol_name=['metal''radius']out_format=textformat(out_file=none))note that class is passed here ""print the formatted output "" for in col_nameprint header print("{:> }format( )end='print(print empty line for in list_nameprint values for in col_nameprint("{:> }format(str(getattr(lc)))end='print((continues on next page advance inheritance