传递异常并执行下一行代码

时间:2019-08-16 07:28:55

标签: python exception

我在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]不存在或未定义,则会引发“键错误”的异常,并且其他值也不会插入数据库中,所以有办法如果未定义,我可以为其指定一个空值或”。

谢谢

2 个答案:

答案 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))