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