除了特定种类的pymysql.err.InternalErrors之外,我如何才能排除呢?

Zac*_*ack 5 python error-handling

我正在写一个函数,可以向我的数据库添加一个新表。我遇到的问题是表已经存在时出现错误消息:

pymysql.err.InternalError: (1050, "Table 'doesthiswork' already exists")
Run Code Online (Sandbox Code Playgroud)

因此,我在代码中添加了一个except,该代码可以正常工作,但它排除了所有内部错误。除了我假定的特定错误不是1050而不是内部错误之外,如何获取代码?

import pymysql

def CreateTable(Host,User,Password,DataBase,TableName):

    try:
        conn = pymysql.connect(
                           host = Host,
                           user = User,
                           password= Password,
                           db = DataBase
                          )
        a = conn.cursor()
        tblName = TableName
        sql = 'CREATE TABLE'+" "+ tblName + '(try varchar(128));'

        a.execute(sql)

    except pymysql.err.InternalError: 
        print (tblName + " " + 'already exist')
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但是如前所述,如果出现了其他类型的内部错误,则仅会因为表已经存在而不是实际错误本身而已。

ACh*_*ion 6

将异常分配给变量并测试特定的错误代码,例如:

except pymysql.err.InternalError as e:
    code, msg = e.args
    if code == 1050:
        print(tblName, 'already exists')
Run Code Online (Sandbox Code Playgroud)

虽然你可能只是print(msg)