代码之家  ›  专栏  ›  技术社区  ›  chernevik

在Python中捕获MySQL警告

  •  14
  • chernevik  · 技术社区  · 15 年前

    'DROP DATABASE IF EXISTS database_of_armaments' 当不存在这样的数据库时。我想捕获并记录它,但即使在try/else语法中,警告消息仍然会出现。

    try/except语法确实捕捉到MySQL错误(例如,提交类似于 'DRP DATABASE database_of_armaments' ).

    我已经试过了 <<except.MySQLdb.Warning>>

    具体来说,我如何让下面的(或类似的)工作。

    try:
        cursor.execute('DROP DATABASE IF EXISTS database_of_armaments')
    except: <<WHAT DO I PUT HERE?>>
        print 'There was a MySQL warning.' 
        <<AND what goes here if I want to get and manipulate information about the warning?>>
    

    谢谢你的评论。我尝试了这些方法,但都不起作用——但我一直在使用为连接编写的DatabaseConnection类及其runQuery()方法来执行。当我在类外部创建连接和游标时,try/Exception异常捕获到“编程错误”,并且Exception MySQLdb.ProgrammingError按照公布的方式工作。

    所以现在我必须找出我的类编码有什么问题。

    6 回复  |  直到 15 年前
        1
  •  14
  •   S.Lott    15 年前

    遵循以下步骤。

    1. except Exception, e: print repr(e)

    2. 看看你有什么例外。

    3. 改变 Exception

    另外,请记住,异常e是一个对象。你可以打印 dir(e) , e.__class__.__name__ ,以查看它具有哪些属性。

    此外,您还可以在 >>>

        2
  •  8
  •   karlcow    15 年前

    你试过这样的东西吗?

    try:
        cursor.execute(some_statement)
    except MySQLdb.IntegrityError, e: 
        # handle a specific error condition
    except MySQLdb.Error, e:
        # handle a generic error condition
    except MySQLdb.Warning, e:
        # handle warnings, if the cursor you're using raises them
    
        3
  •  2
  •   dangerouslyfacetious    15 年前

    我认为您要捕获的异常是MySQLdb.ProgrammingError,要获取有关它的信息,只需添加一个变量来存储错误数据(元组),即:

    try:
        cursor.execute('DROP DATABASE IF EXISTS database_of_armaments')
    except MySQLdb.ProgrammingError, e:
        print 'There was a MySQL warning.  This is the info we have about it: %s' %(e) 
    
        4
  •  2
  •   rafaelxy    8 年前

    我成功地捕获了mysql警告,如下所示:

    import _mysql_exceptions
    
    try:
        foo.bar()
    except _mysql_exceptions.Warning, e:
        pass
    
        5
  •  1
  •   Victor Gavro    6 年前

    首先,您应该打开警告以将其视为异常,然后才能捕获它们。 https://docs.python.org/3/library/warnings.html#the-warnings-filter

        6
  •  0
  •   Christian    9 年前

    朴素

    def log_warnings(curs):
        for msg in curs.messages:
            if msg[0] == MySQLdb.Warning:
                logging.warn(msg[1])
    
    cursor.execute('DROP DATABASE IF EXISTS database_of_armaments')
    log_warnings(cursor)
    

    msg[1]示例:- (u'Warning', 1366L, u"Incorrect integer value: '\xa3' for column 'in_userid' at row 1")