我正在写一个函数,可以在我的数据库中添加一个新表。我遇到的问题是当表已经存在时,我收到错误消息:
pymysql.err.InternalError: (1050, "Table 'doesthiswork' already exists")
所以我在我的代码中添加了一个除外,但它除了所有内部错误外都有效。如何获取我的代码,除了我假设的具体错误是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')
上面的代码有效,但如前所述,如果出现了不同类型的内部错误,那么除了表已经存在而不是实际错误本身之外。
答案 0 :(得分:6)
将异常分配给变量并测试特定的错误代码,例如:
except pymysql.err.InternalError as e:
code, msg = e.args
if code == 1050:
print(tblName, 'already exists')
虽然你可能只是print(msg)
。
答案 1 :(得分:3)
您不必对代码值进行硬编码,它们可以在pymysql.constants.ER
module中找到。并且您可以在错误代码和错误消息之间建立映射,这有助于扩展此方法以处理更多错误,而无需乘以if / else块:
from pymysql.constants import ER
error_codes = {
ER.TABLE_EXISTS_ERROR: "Table already exists",
ER.ACCESS_DENIED_ERROR: "Access denied"
}
try:
# ...
except pymysql.err.InternalError as e:
code, msg = e.args
print(error_codes.get(code, msg))
答案 2 :(得分:0)
您可以像这样添加额外的全部“除外”:
try:
# your code here
except pymysql.err.InternalError:
print('already exists')
except:
print('catch-all exception!')