将try-except块与python代码合并

将try-except块与python代码合并,python,linux,exception,try-except,Python,Linux,Exception,Try Except,我正在用多个查询填充一个电子表格,这些查询返回一个键和一个对应的值。脚本中使用了两个数据库连接来返回数据 如果正在执行的SQL语句没有问题,那么下面的代码可以很好地工作。如果SQL出现问题,程序将带着错误退出,并且我的电子表格不会填充 如果出现错误,我仍希望填充第一列中的键,并使值返回“0” 棘手的部分是,因为有两个服务器连接,一个服务器可能处理SQL非常好,另一个可能抛出异常 有没有一种方法可以转换这个代码块来处理这个问题 我是一个Python新手,所以深入研究错误处理有点让人望而生畏 # P

我正在用多个查询填充一个电子表格,这些查询返回一个键和一个对应的值。脚本中使用了两个数据库连接来返回数据

如果正在执行的SQL语句没有问题,那么下面的代码可以很好地工作。如果SQL出现问题,程序将带着错误退出,并且我的电子表格不会填充

如果出现错误,我仍希望填充第一列中的键,并使值返回“0”

棘手的部分是,因为有两个服务器连接,一个服务器可能处理SQL非常好,另一个可能抛出异常

有没有一种方法可以转换这个代码块来处理这个问题

我是一个Python新手,所以深入研究错误处理有点让人望而生畏

# Populate the spreadsheet with data from the first set of date ranges.
row = 1
col = 0

for key, value in Queries.query_dic.iteritems():
    cur.execute(value.format(from_dateA,to_dateA))
    cur2.execute(value.format(from_dateA,to_dateA))
    rows = cur.fetchall()
    rows2 = cur2.fetchall()

    # Populate metric being queried in our horizontal headers
    worksheet[index].write(row, col, key, format)
    worksheet[index + 1].write(row, col, key, format)

    # Iterate over the data and write it out row by row.
    for return_count in rows:
        worksheet[index].write(row, col + 1, return_count[0], format2)

    for return_count in rows2:
        worksheet[index + 1].write(row, col + 1, return_count[0], format2)

    row += 1

要使用“尝试”,请执行以下操作

try:
    for key, value in Queries.query_dic.iteritems():
        cur.execute(value.format(from_dateA,to_dateA))
        cur2.execute(value.format(from_dateA,to_dateA))
        rows = cur.fetchall()
        rows2 = cur2.fetchall()

        # Populate metric being queried in our horizontal headers
        worksheet[index].write(row, col, key, format)
        worksheet[index + 1].write(row, col, key, format)

        # Iterate over the data and write it out row by row.
        for return_count in rows:
            worksheet[index].write(row, col + 1, return_count[0], format2)

        for return_count in rows2:
            worksheet[index + 1].write(row, col + 1, return_count[0], format2)

        row += 1
except:
    # Error Handling
如果希望进行特定于错误的处理,只需将错误放在except之后即可

except KeyboardInterrupt:
    # Error Handling

经过反复试验,我找到了一个有效的解决方案

# Print metric headers and counts for first date range.
row = 1
col = 0

for key, value in Queries.query_dic.iteritems():

    # Write the metrics headers
    worksheet[index].write(row, col, key, format)
    worksheet[index + 1].write(row, col, key, format)

    # Populate spreadsheet with count returned from query for Environment 1. 
    try:
        cur.execute(value.format(from_dateA,to_dateA))
        rows = cur.fetchall()
        for return_count in rows:
            worksheet[index].write(row, col + 1, return_count[0], format2)
    # Query will fail if module doesn't exist; in this case print '0'.
    except:
        worksheet[index].write(row, col + 1, '0', format2)

    # Populate spreadsheet with count returned from query for Environment 2. 
    try:
        cur2.execute(value.format(from_dateA,to_dateA))
        rows = cur2.fetchall()
        for return_count in rows:
            worksheet[index + 1].write(row, col + 1, return_count[0], format2)
    # Query will fail if module doesn't exist; in this case print '0'.
    except:
        worksheet[index + 1].write(row, col + 1, '0', format2)

    row += 1

哪个语句抛出错误?哪种类型?例如,如果SQL中有错误的语法,它将抛出错误。我不确定这是否发生在cur.execute语句或cur.fetchall()上。这里的问题是,由于我正在连接两个服务器,因此查询可能对其中一个服务器有效,而对另一个服务器无效。使用此代码,如果一台服务器“中断”,它将抛出异常,即使另一台服务器可以完美地处理SQL。