Плохой аргумент для внутренней ошибки функции в PythonPython

Программы на Python
Ответить
Anonymous
 Плохой аргумент для внутренней ошибки функции в Python

Сообщение Anonymous »

У меня есть сценарий 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 — это функция, которая... создает отчет.
Я выполнил отладку кода и не обнаружил никаких ошибок, из-за которых ошибка могла бы появиться. Ошибка возникает только в некоторых случаях, тогда как в других случаях отчет создается нормально.

EDIT===== Код createReport

Код: Выделить всё

def createReport(myReportTable, myReportFolder, M3Table, OpenPDF):
global Author
global TimeStamp

##    myReportTable = gp.GetParameterAsText(0)
##    myReportFolder = gp.GetParameterAsText(1)
##    M3Table = gp.GetParameterAsText(2)
##    OpenPDF = gp.GetParameterAsText(3)

Author = getpass.getuser() #gets OS user name
TimeStamp = str(datetime.datetime.now().hour) + ':' + str(datetime.datetime.now().minute) + ' on the ' + str(datetime.date.today().day) + '/' + str(datetime.date.today().month) + '/' + str(datetime.date.today().year)

#add time stamp to file name
myFile = myReportFolder + os.sep + 'CoolingTowersForInspection_' + str(datetime.datetime.now().hour) + '_' + str(datetime.datetime.now().minute) + '_' + str(datetime.date.today().day) + '_' + str(datetime.date.today().month) + '_' + str(datetime.date.today().year) + '.pdf'
c = reportlab.pdfgen.canvas.Canvas(myFile)

#creates sectors array
sectors = []
sectors.append('NW')
sectors.append('NE')
sectors.append('SW')
sectors.append('SE')

for sector in sectors:
#sector header
#framePage(c, 'Cooling Towers for Inspection - ' + sector + ' sector')
title = 'Cooling Towers for Inspection - ' + sector + ' sector'
c.setFont('Helvetica',20) #title font
c.drawString(reportlab.lib.units.inch, 10.5 * reportlab.lib.units.inch, title) #creates title

c.setFont('Helvetica',10) #header and footer font

#creates header
c.drawCentredString(4.135 * reportlab.lib.units.inch, 0.75 * reportlab.lib.units.inch,
'Report generated by ' + Author + ' at ' + TimeStamp + ' - Page %d' % c.getPageNumber())

#creates footer
c.drawCentredString(4.135 * reportlab.lib.units.inch, 11.00 * reportlab.lib.units.inch,
'Environmental Services')

#draw a border
c.setStrokeColorRGB(1,0,0)
c.setLineWidth(5)
c.line(0.8 * reportlab.lib.units.inch, reportlab.lib.units.inch, 0.8 * reportlab.lib.units.inch, 10.75 * reportlab.lib.units.inch)

#reset carefully afterwards
c.setLineWidth(1)
c.setStrokeColorRGB(0,0,0)

c.setFont('Helvetica', 10)

#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

inspectString = ""
if selTower.TOWER_RATING  None:
inspectString = "Inspection rating: " + selTower.TOWER_RATING
else:
inspectString = "Inspection rating: na;"

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

#creates header
canvas.drawCentredString(4.135 * reportlab.lib.units.inch, 0.75 * reportlab.lib.units.inch,
'Report generated by ' + Author + ' at ' + TimeStamp + ' - Page %d' % canvas.getPageNumber())

#creates footer
canvas.drawCentredString(4.135 * reportlab.lib.units.inch, 11.00 * reportlab.lib.units.inch,
'Environmental Services')

#draw a border
canvas.setStrokeColorRGB(1,0,0)
canvas.setLineWidth(5)
canvas.line(0.8 * reportlab.lib.units.inch, reportlab.lib.units.inch, 0.8 * reportlab.lib.units.inch, 10.75 * reportlab.lib.units.inch)

#reset carefully afterwards
canvas.setLineWidth(1)
canvas.setStrokeColorRGB(0,0,0)
РЕДАКТИРОВАНИЕ Номер 2 *

Полная обратная трассировка находится здесь

Код: Выделить всё

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
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/179 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»