一尘不染

Python:TypeError:不支持的格式字符串传递给NoneType。__format__

sql

我目前有一个程序从数据库中读取数据,可以在此处找到。我让用户选择他们想要显示的特定记录,以便SQL命令将执行该记录。现在,我有一个表,该表当前显示一些不包含任何NULL或空字符串的记录。如果它确实具有NULL或空字符串,则会给我一个错误,并且程序不会显示记录。我发现那是NoneType错误的主要来源。我不确定该如何解决。我如何确保它也可以计算Null或空字符串?希望可以解决该错误。

如果要尝试测试数据库,则不会显示“客户”之类的表,因为它具有空值。

这是回溯错误:

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)

阅读 195

收藏
2021-05-16

共1个答案

一尘不染

您输入了错误,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)
2021-05-16