2016-11-30 2 views
2

Ich möchte in der Lage sein, eine Zeichenfolge wie unten zu nehmen und den ersten Parameter (id) herausziehen und dann verwenden, um es auszudrucken. Ich habe in Split nach Python gesucht, aber normalerweise muss ich zwei oder drei Mal aufteilen, bevor ich etwas brauchbares bekomme. Hierparse SQL-Abfragen in Python

ist ein Beispiel für die Saiten, die ich zu analysieren, ich versuche:

EntryError(u"(sqlite3.IntegrityError) UNIQUE constraint failed: 
role.name, role.domain_id [SQL: u'INSERT INTO table1 (id, name, 
domain_id, extra) VALUES (?, ?, ?, ?)'] [parameters: ('id', 
'fake1name', '<<null>>', '{}')]",) 

Ich habe versucht, Dinge wie:

e = e.split("\'") 
e = e.split(",") 

Aber das gibt mir seltsam Strings, die weiter müssen analysiert werden. Gibt es einen einfacheren Weg, immer die id von "[parameters: ('id', 'fake1name', '<<null>>', '{}')]" zu ziehen?

Hier ist der Code, den ich habe:

except exception.EntryError as e: 

    query = str(e) 
    # example of me using split to try and reduce the string 
    parsedstr = query.split("[") 
    parsedstr = parsedstr.split("\'") 

    # This will give me id like I want but it doesn't seem efficient 
    # prints: id 
    print parsedstr[1] 
+2

Können Sie den Rest Ihres Codes anzeigen - haben Sie tatsächlich Zugriff auf den Cursor oder die Ausnahmeinstanz selbst? Vielen Dank. – alecxe

+0

@alecxe hinzugefügt :) – ayonpyth

+0

Welche Zeichenfolge versuchen Sie zu analysieren? Versuchen Sie tatsächlich, die Nachricht im oben genannten EntryError-Objekt zu analysieren? –

Antwort

1

Sie reguläre Ausdrücke verwenden können.

import re 

... 

except exception.EntryError as e: 
    print re.search("\[parameters: \('([^']+)", str(e)).group(1) 

Dies würde den Ausnahme-String nach dem ersten Vorkommen von [parameters: (' suchen und von diesem Punkt passend beginnen, bis er ein ' trifft.