Когда вы обрабатываете исключение, вы добавляете значение по умолчанию, которое нельзя сравнить с вашими числами с плавающей точкой:
except:
t.add_row([acType, fleetReg, chk, wear, config, "", "", "", "", "", "", ""])
# these are all strings ^^ ^^ ^^ ^^ ^^ ^^ ^^
Если вы хотите отсортировать по столбцу prof/pax
, вы нужно указать в этом столбце только цифры c значения . Возможно, вам вполне подойдет 0
?
except:
t.add_row([acType, fleetReg, chk, wear, config, "", "", "", "", "", 0, ""])
# numeric value for profPax ^^
В качестве альтернативы вы можете указать ключ сортировки , вызываемый для преобразования каждого значения в отсортированном столбце во что-то для сравнения. Вы можете использовать это, чтобы заменить строки нулями только при сортировке :
t.sort_key = lambda value: value or 0
Это использует тот факт, что оба ""
и 0
являются ложными-y и так or
выберет второе возвращаемое значение, 0
:
>>> value = ""
>>> value or 0
0
Примечание: это редко хорошая идея использовать except:
без квалификации. Если ваш код имеет, скажем, проблемы с нулевым делением, перехватывает только это исключение :
except ZeroDivisionError:
t.add_row([acType, fleetReg, chk, wear, config, "", "", "", "", "", "", ""])
Вы всегда можете добавить больше исключений; Ваш код потенциально может вызвать ValueError
s (из int()
преобразований и т. п.) и AttributeError
(из-за попытки обработать None
значения, как будто они являются элементами BeautifulSoup, например), так что вы можете поймать только эти 3 :
except (ZeroDivisionError, ValueError, AttributeError):
t.add_row([acType, fleetReg, chk, wear, config, "", "", "", "", "", "", ""])
Это значительно упростит обнаружение ошибок в вашем коде в дальнейшем и позволит вам легче прерывать вашу программу, если она занимает много времени. не перехватывает исключение KeyboardInterrupt
.