New submission from Alexander Shirokov:

Please run debracket.py
It halts immediately and the message
explains the problem.
Regards
Alex

----------
files: debracket.py
messages: 56265
nosy: alexander.shirokov
severity: normal
status: open
title: Error on 'raise' does not show correct line number and Traceback message
type: behavior
versions: Python 2.5

__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1244>
__________________________________
#!/usr/bin/python

import os, sys, xml.dom.minidom

a = '\(\(\(1/\(4959476121600 a1^7 a2^7 r^2\)\)\((-r^14 + 14 a1^13 heavi[a1-5*a2-r^2]^2 )\)\)\)'


# Convert the brackets into XML tokens
a = a.replace(r'\(','<bs>\n')
a = a.replace(r'\)','</bs>\n')
a = a.replace('(','<bra>\n')
a = a.replace(')','</bra>\n')

# Enclose the document 
a = '<xml>\n'+a+'\n</xml>\n'



# Parse the XML document
dom = xml.dom.minidom.parseString(a)


def convert_node_to_strlist(dom):

    try:
        #print "tagName=",dom.tagName
        dom.tagName
    except:
        None

    a = []
    for d in dom.childNodes:
        if d.nodeType == d.TEXT_NODE:
            t = str(d.data).strip()
            if len(t):
                a += [t]
        else:
            a += convert_node_to_strlist(d)
    return a



m = convert_node_to_strlist(dom)

#print m


if len(m) != 3 and len(m) != 4: raise


def extract_nom_denom(m):
    if len(m) == 3:
        if m[0] == '1/':
            nom = m[2]
            denom = m[1]
        elif m[1] == '/':
            nom = m[0]
            denom = m[2]
        else:
            raise 
    elif len(m) == 4:
        if m[0] == '-' and m[1] == '1/':
            denom = m[0]+m[2]
            nom = m[3]
        else:
            raise
    return nom, denom


nom,denom =  extract_nom_denom(m)



a = nom
a = a.replace(' + ', '\n+')
a = a.replace(' - ', '\n-')


# Make sure the first token is a signed integer coefficient
q = []
a0 = a.split('\n')
for a in a0:

    if len(a) == 0: continue

    #print "<<", a
    b = a.split()
    test_int = 1
    #print "|"
    try:
        c = int(b[0])
    except:
        test_int = 0


    if test_int:
        repl = '%+d %s' % ( c, ' '.join(b[1:]))
    else:
        w = b[0]
        if w[0] == '+':
            c = 1
            w = ''.join(list(w[1:]))
        elif w[0] == '-':
            c = -1
            w = ''.join(list(w[1:]))
        else:
            c = 1

        repl = '%+d %s %s' % ( c, w, ' '.join(b[1:]))

    #print '>>', repl
    q += [repl]


a = '\n'.join(q)




token='heavi'


# Pad the powers
pad=2
b0 = []

a0 = a.split('\n')
for l in a0:
    #print 'l=',l
    o0 = []
    l0 = l.split()
    #print 'l0=',l0
    for w in l0:
        s = w.split('^')
        # This is an ordinary word
        if len(s) == 1:
            o = w
        # This is a power
        elif len(s) == 2:
            bs = s[0]
            pw = int(s[1])

            if bs.find(token) == 0:
                if pw == 0: raise
                o = bs
            else:
                pw = "%0*d" % ( pad, pw )
                o = bs+'^'+pw
        else:
            print "A. Shirokov: The error occurs with 'raise' in line 154"
            print "             but Python does not report the line number correctly, by only saying 'File \"./debracket.py\", line 91'"
            print "             The stack of error messages may have some problem"
            print "----------------------------------------------------------------"
            raise

        o0 += [o]

    b0 += [ ' '.join(o0) ]
a = '\n'.join(b0);



print "Done3"




fh = file(fb,"w")
fh.write(a)
fh.close()


print "Done4"

_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to