我希望能够获取如下所示的字符串并拉出第一个参数(id
),然后使用它来打印出来。我一直在考虑拆分python,但我通常需要拆分2到3次才能获得可用的东西。
以下是我尝试解析的字符串示例:
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>>', '{}')]",)
我尝试过这样的事情:
e = e.split("\'")
e = e.split(",")
但这给了我奇怪的字符串,必须进一步解析。是否有更简单的方法可以始终从id
提取"[parameters: ('id', 'fake1name', '<<null>>', '{}')]"
?
这是我的代码:
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]
答案 0 :(得分:1)
您可以使用正则表达式。
import re
...
except exception.EntryError as e:
print re.search("\[parameters: \('([^']+)", str(e)).group(1)
这会在第一次出现[parameters: ('
时搜索异常字符串,并从该点开始匹配,直到它到达'
。