【问题标题】:Python - How to catch specific mysql warnings?Python - 如何捕获特定的 mysql 警告?
【发布时间】:2014-12-04 16:03:49
【问题描述】:

我想捕捉任何包含字符串 'value' 的警告。

来自this question,我看到这个例子来捕捉特定的消息:

warnings.filterwarnings('error', 'Unknown table .*')

docs说一下message参数:

message 是一个字符串,其中包含警告消息必须匹配的正则表达式(匹配被编译为始终不区分大小写)。

我有以下代码,但没有抛出任何错误,而是收到了我无法捕捉到的警告。

warnings.filterwarnings('error', message='\bvalue\b')   

我错过了什么?据我所知,该正则表达式应该适用于匹配“值”字符串。

【问题讨论】:

    标签: python try-catch warnings mysql-python


    【解决方案1】:

    Python 的正则表达式语法记录在here,它说的第一件事是:

    正则表达式使用反斜杠字符 ('\') 来指示特殊形式或允许使用特殊字符而不调用其特殊含义。这与 Python 在字符串文字中出于相同目的使用相同字符相冲突;例如,要匹配文字反斜杠,可能必须将 '\\' 写为模式字符串,因为正则表达式必须是 \,并且每个反斜杠必须在常规 Python 字符串文字中表示为 \。

    解决方案是对正则表达式模式使用 Python 的原始字符串表示法;在以 'r' 为前缀的字符串文字中,反斜杠不会以任何特殊方式处理。所以 r"\n" 是一个包含 '\' 和 'n' 的两个字符的字符串,而 "\n" 是一个包含换行符的一个字符的字符串。通常模式将使用这种原始字符串表示法在 Python 代码中表示。

    在 Python 中,与许多语言一样,字符串 '\b' 对应于 ASCII 退格 (link)。

    您需要转义反斜杠字符,或者使用 Python 的特殊“原始/正则表达式”前缀:

    warnings.filterwarnings('error', message='\\bvalue\\b')
    warnings.filterwarnings('error', message=r'\bvalue\b')
    

    【讨论】:

    • 两个都试过了,还是不行。以下将捕获警告,尽管它不像我想要的那样具体,因此问题是:warnings.filterwarnings('error', category=MySQLdb.Warning)。这是警告:/Users/jeff/Dropbox/homedev/fundlookup/data/db.py:35:警告:字段“crd”没有默认值
    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    相关资源
    最近更新 更多