[英]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.