У меня есть сценарий Python, который использует ReportLab для создания отчета. Этот сценарий был протестирован и работает должным образом, однако иногда я получаю следующее сообщение об ошибке
TraceBack info:
File "C:\tools\LegionellaTool.py", line 605, in
createReport(selectedCoolingTowers, Report_outputs_folder, dbo_COLGIS, openPDF)
Error Info:
..\Objects\moduleobject.c:50: bad argument to internal function
Строка 605 — это createReport(selectedCoolingTowers, Report_outputs_folder, dbo_COLGIS, openPDF)
createReport — это функция, которая... создает отчет.
Я выполнил отладку кода и не обнаружил никаких ошибок, из-за которых ошибка могла бы появиться. Ошибка возникает только в некоторых случаях, тогда как в других случаях отчет создается нормально.
Traceback (most recent call last):
File "C:\tools\LegionellaTool.py", line 613, in
createReport(selectedCoolingTowers, Report_outputs_folder, dbo_COLGIS, openPDF)
File "C:\tools\LegionellaTool.py", line 120, in createReport
c.drawString(reportlab.lib.units.inch, 10.5 * reportlab.lib.units.inch, title) #creates title
File "c:\python26\arcgis10.0\lib\site-packages\reportlab\pdfgen\canvas.py", line 1481, in drawString
t.textLine(text)
File "c:\python26\arcgis10.0\lib\site-packages\reportlab\pdfgen\textobject.py", line 426, in textLine
self._code.append('%s T*' % self._formatText(text))
File "c:\python26\arcgis10.0\lib\site-packages\reportlab\pdfgen\textobject.py", line 393, in _formatText
for f, t in pdfmetrics.unicode2T1(text,[font]+font.substitutionFonts):
SystemError: ..\Objects\moduleobject.c:50: bad argument to internal function
: 1
У меня есть сценарий Python, который использует ReportLab для создания отчета. Этот сценарий был протестирован и работает должным образом, однако иногда я получаю следующее сообщение об ошибке
..\Objects\moduleobject.c:50: bad argument to internal function [/code]
Строка 605 — это createReport(selectedCoolingTowers, Report_outputs_folder, dbo_COLGIS, openPDF)
createReport — это функция, которая... создает отчет. Я выполнил отладку кода и не обнаружил никаких ошибок, из-за которых ошибка могла бы появиться. Ошибка возникает только в некоторых случаях, тогда как в других случаях отчет создается нормально.
[b]EDIT=====[/b] Код createReport
[code]def createReport(myReportTable, myReportFolder, M3Table, OpenPDF): global Author global TimeStamp
#gets towers in that sector myTowers = arcpy.SearchCursor(myReportTable,"\"SECTOR\" = '" + sector + "'","","") selTower = myTowers.next()
y = 730
if selTower is not None:
while selTower: #insert page break when close to the end of the page if y < 110: c.showPage() y = 730 framePage(c, 'Cooling Towers for Inspection - ' + sector + ' sector')
if selTower.TOWER_NAME None: c.drawString(100, y, string.strip(selTower.TOWER_NAME)) else: c.drawString(100, y, "na") y = y - 12
if selTower.TOWER_ADDRESS None: c.drawString(100, y, string.strip(selTower.TOWER_ADDRESS)) else: c.drawString(100, y, "na") y = y - 12
c.drawString(100, y, "Number of towers: " + str(int(selTower.NUMBER_OF_TOWERS)) + " ; M3 Code: " + selTower.UKEY + " ; Distance band: " + str(int(selTower.distance)) + " meters") y = y - 12
if selTower.TOWER_LAST_INSPECTION None: t = selTower.TOWER_LAST_INSPECTION strLastInspection = t.strftime("%A, %d %b %Y")
inspectString = inspectString + " Last inspection: " + strLastInspection #inspectString = inspectString + " Last inspection: " + selTower.TOWER_LAST_INSPECTION else: inspectString = inspectString + " Last inspection: na"
c.drawString(100, y, inspectString) y = y - 12
c.drawString(100, y, "Contacts:") y = y - 12
myTowerUKEY = selTower.UKEY
#gets contacts for that cooling tower myTowerContacts = arcpy.SearchCursor(M3Table,"\"UKEY\" = '" + myTowerUKEY + "'","","")
selContact = myTowerContacts.next()
while selContact: if y < 110: c.showPage() y = 730 framePage(c, 'Cooling Towers for Inspection - ' + sector + ' sector')
contact = "" if selContact.TITLE None: if string.strip(selContact.TITLE) "": contact = string.strip(selContact.TITLE) + " " if selContact.FIRSTNAME None: contact = contact + selContact.FIRSTNAME + " " if selContact.FAMILYNAME None: contact = contact + selContact.FAMILYNAME + " " if selContact.JOBTITLE None: contact = contact + "(" + selContact.JOBTITLE + ") " if selContact.TELW None: contact = contact + selContact.TELW + "(work) " if selContact.MOBILE None: if string.strip(selContact.MOBILE) "": contact = contact + string.strip(selContact.MOBILE) + "(mobile) " if selContact.TELH None: if string.strip(selContact.TELH) "": contact = contact + string.strip(selContact.TELH) + "(home)"
contact = string.strip(contact)
c.drawString(100, y, contact) y = y - 12 selContact = myTowerContacts.next()
y = y - 12 del myTowerContacts selTower = myTowers.next() else: c.drawString(100, y, "no cooling towers for inspection in this sector")
c.showPage() #insert page break after each sector
del myTowers
c.save()
if OpenPDF == "true": os.startfile(myFile)
#function that creates each page def framePage(canvas, title): canvas.setFont('Helvetica',20) #title font canvas.drawString(reportlab.lib.units.inch, 10.5 * reportlab.lib.units.inch, title) #creates title
canvas.setFont('Helvetica',10) #header and footer font
[code]Traceback (most recent call last): File "C:\tools\LegionellaTool.py", line 613, in createReport(selectedCoolingTowers, Report_outputs_folder, dbo_COLGIS, openPDF)
File "C:\tools\LegionellaTool.py", line 120, in createReport
c.drawString(reportlab.lib.units.inch, 10.5 * reportlab.lib.units.inch, title) #creates title
File "c:\python26\arcgis10.0\lib\site-packages\reportlab\pdfgen\canvas.py", line 1481, in drawString
t.textLine(text)
File "c:\python26\arcgis10.0\lib\site-packages\reportlab\pdfgen\textobject.py", line 426, in textLine
self._code.append('%s T*' % self._formatText(text)) File "c:\python26\arcgis10.0\lib\site-packages\reportlab\pdfgen\textobject.py", line 393, in _formatText
for f, t in pdfmetrics.unicode2T1(text,[font]+font.substitutionFonts): SystemError: ..\Objects\moduleobject.c:50: bad argument to internal function