【问题标题】:Python: TypeError: 'NoneType' object is not callablePython:TypeError:“NoneType”对象不可调用
【发布时间】:2015-04-29 08:56:42
【问题描述】:

我正在尝试读取 CSV 并将其添加到对象列表中。

这是课程代码

class ReportItem:
    '''
    classdocs
    '''
    def __init__(self, hostname, jdbcDbname):
        '''
        Constructor
        '''
        self.hostname = hostname
        self.jdbcDbname = jdbcDbname
        self.dbname = None
        self.schema = None
        self.shortName = None
        self.totalRows = None
        self.archivedRows = None
        self.deletedRows = None
        self.deletedSizeMB = None
        self.totalSizeMB = None
        self.archivedSizeMB = None
        self.deletedSizeMB = None

    def setDbname(self, dbname):
        self.dbname = dbname

    def setSchema(self, schema):
        self.schema = schema

    def setShortName(self, shortName):
        self.shortName = shortName

    def setTotalRows(self, totalRows):
        self.totalRows = totalRows

    def setArchivedRows(self, archivedRows):
        self.archivedRows = archivedRows

    def setDeletedRows(self, deletedRows):
        self.deletedRows = deletedRows

    def setTotalSizeMB(self, totalSizeMB):
        self.totalSizeMB = totalSizeMB

    def setArchivedSizeMB(self, archivedSizeMB):
        self.archivedSizeMB = archivedSizeMB

    def setDeletedSizeMB(self, deletedSizeMB):
        self.deletedSizeMB = deletedSizeMB

这是实现代码:

import csv
from ReportItem import ReportItem

reportList = []

with open('Tables.csv', 'r') as csvfile:
    has_header = csv.Sniffer().has_header(csvfile.read(1024))
    csvfile.seek(0)
    csvReader = csv.reader(csvfile, delimiter=',', quotechar='\'')
    if has_header:
        next(csvfile, None)
    for col in csvReader:
        reportItem = ReportItem(col[0], col[1])
        reportItem.setDbname(col[2])
        reportItem.setSchema(col[3])
        reportItem.setShortName(col[4])
        reportItem.setTotalRows(col[5])
        reportItem.setArchivedRows(col[6])
        reportItem.setDeletedRows(col[7])
        reportItem.totalSizeMB(col[8])
        reportItem.archivedSizeMB(col[9])
        reportItem.setDeletedSizeMB(col[10])
        reportList.append(reportItem)


for ri in reportList:
    print(ri.dbname)

CSV 内容如下所示: xxx xx xxxx xxxx xxxxx -1 0.06 -1 -1 -1 -1

这导致了错误:

Traceback (most recent call last):
  File "CSVImporter.py", line 25, in <module>
    reportItem.totalSizeMB(col[8])
TypeError: 'NoneType' object is not callable

另一个问题是这个 col[8] 也可以使用科学计数法表示,例如 1.000E5。解决此问题的最佳方法是什么?

【问题讨论】:

  • 这引出了一个问题,你为什么要编写函数来设置事物?

标签: python csv nonetype


【解决方案1】:

它看起来像一个错字。你的代码应该是

reportItem.setTotalSizeMB(col[8])

而不是

reportItem.totalSizeMB(col[8])

你的类中没有函数 totalSizeMB。

【讨论】:

    【解决方案2】:

    我想我找到了原因。在实现中,您调用在类的 init 函数中定义的 totalSizeMB 变量。变量不带参数。 (也许你的意思是函数,setTotalSizeMB)

    如果是这样的话,那么下面就是同样的问题(archivedSizeMB)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多