Python: TypeError: Неподдерживаемая строка формата, переданная в NoneType .__ format__ - PullRequest
0 голосов
/ 03 мая 2019

У меня есть программа, которая в данный момент читает из базы данных, которую можно найти здесь .У меня есть пользователи, которые выбирают конкретную запись, которую они хотят отобразить, поэтому команда SQL выполнит эту запись.Теперь у меня есть таблица, которая в настоящее время отображает некоторые записи, которые не содержат пустых или пустых строк.Если он имеет NULL или пустые строки, он выдает ошибку, и программа не отображает записи.Я понял, что именно из-за этого чаще всего возникает ошибка NoneType.Я не уверен, как это исправить.Как я могу убедиться, что он также учитывает пустые или пустые строки?Надеемся, что это исправит ошибку.

Если вы попытаетесь протестировать БД, таблицы, такие как Клиенты, не будут отображаться, потому что у нее нулевые значения.

Вот ошибка трассировки:

line '..', in read_display(record)
    line = format_.format(*rec)
TypeError: unsupported format string passed to NoneType.__format__

Вот как выглядит мой код: import sqlite3

def read_display(record):
  database = 'data.db'
  connection = sqlite3.connect(database)
  c = connection.cursor()
  sql = "SELECT * FROM {0}".format(record)
  cursor.execute(sql)
  conn.commit()
  results = cursor.fetchall()

  header = tuple(i[0] for i in c.description)
  width = max((len(str(x)) for d in data for x in d))

  data = [header] + results

  config = [{'width': 0} for _ in range(len(data[0]))]

  for rec in data:
    for c, value in enumerate(rec):
        config[c]['width'] = max(config[c]['width'], len(str(value)))


  format_ = []
  for f in config:
    format_.append('{:<' + str(f['width']) + '}')

  format_ = ' | '.join(format_)
  for rec in data:
    line = format_.format(*rec)
    print(line)

1 Ответ

1 голос
/ 03 мая 2019

У вас есть ошибка в line = format_.format(*rec), и вы можете получить ту же ошибку с '{:s}'.format(None), поэтому кажется, что rec имеет None в списке.

Вы должны преобразовать его в строку с str(None)

Вы можете использовать str() со всеми элементами в rec, чтобы убедиться:

 rec = [str(x) for x in rec]

Так код должен быть

for rec in data:
    rec = [str(x) for x in rec]
    line = format_.format(*rec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...