我在python中对异常有基本的疑问。我已经写了代码,部分看起来像
try:
if deviceType == 2:
print('data recieved')
a = payload[77000][2,39]
a = a.item()
b = payload[77000][2,91]
b = b.item()
c = payload[77000][2,35]
c = c.item()
d = payload[77000][2,36]
d = d.item()
insert_tuple = (a,b,c,d)
cursor.execute(sql_insert_query,insert_tuple)
connection.commit()
except mysql.connector.Error as error:
connection.rollback() #rollback if any exception occured
print("Failed inserting record into python_users table {}".format(error))
因此,例如,如果有效载荷[77000] [2,39]不存在或未定义,则会引发“键错误”的异常,并且其他值也不会插入数据库中,所以有办法如果未定义,我可以为其指定一个空值或”。
谢谢
答案 0 :(得分:2)
听起来像您正在获得KeyError
,所以请注意!尝试先抓取每个有效载荷:
# gather your payloads
payload_slices = [
slice(2, 39),
slice(2, 91),
slice(2, 35),
slice(2, 36)
]
payloads = []
for sl in payload_slices:
try:
item = payload[77000][sl].item()
except KeyError:
# handle a single failed payload here
pass
else:
payloads.append(item)
# insert
insert_tuple = tuple(payloads)
try:
cursor.execute(sql_insert_query,insert_tuple)
connection.commit()
except mysql.connector.Error as error:
connection.rollback() #rollback if any exception occured
print("Failed inserting record into python_users table {}".format(error))
答案 1 :(得分:0)
您可以将重复的行置于循环中:
if deviceType == 2:
print('data received')
insert = []
for i in (39, 91, 35, 36):
try:
item = payload[77000][2, i].item()
except KeyError:
item = ''
insert.append(item)
insert = tuple(insert)
try:
cursor.execute(sql_insert_query, insert)
connection.commit()
except mysql.connection.Error as error:
connection.rollback()
print("Failed inserting record into python_users table {}".format(error))