簡體   English   中英

Python:TypeError:“ NoneType”對象不可調用

[英]Python: TypeError: 'NoneType' object is not callable

我正在嘗試讀取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的科學符號表示。 解決此問題的最佳方法是什么?

我想我找到了原因。 在實現中,調用在類的init函數中定義的totalSizeMB變量。 變量不帶參數。 (也許您的意思是函數setTotalSizeMB)

如果是這種情況,那么下面就有同樣的問題(archivedSizeMB)

看起來像錯字。 您的代碼應為

reportItem.setTotalSizeMB(col[8])

而不是

reportItem.totalSizeMB(col[8])

您的課程中沒有函數totalSizeMB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM