我从Python脚本中获得以下部分代码。
status = 'success'
try:
sqlContext.sql("create table {}.`{}` as select * from mytempTable".format(hivedb,table))
except Exception as e:
#traceback.print_exc()
error_message = e
# print str(e)
status = 'fail'
print ("{},{},{},{}".format(hivedb,table,status,error_message))
sys.exit(1)
在这部分代码中,如果有exception
,那么我正在设置error_message
。
如果没有错误,那么我会得到UnboundLocalError: local variable 'e' referenced before assignment
。
我想要的是如果没有错误,我希望将error_message
设置为No error
。
我怎样才能做到这一点?
答案 0 :(得分:2)
您需要在try / catch块之前定义error_message
,因为您已经为status
定义了:{/ p>
status = 'success'
error_message = 'No error'
try:
sqlContext.sql("create table {}.`{}` as select * from mytempTable".format(hivedb,table))
except Exception as e:
error_message = e
status = 'fail'
答案 1 :(得分:1)
更简洁的方法是使用else
,因为状态更新应该是原子的。
try:
sqlContext.sql("create table {}.`{}` as select * from mytempTable".format(hivedb,table))
except Exception as e:
status = 'fail'
error_message = e
else: # Executes only if no Exception.
status = 'success'
error_message = 'No error'
作为旁注,使用except Exception
进行一揽子异常捕获是一个坏主意。您应该指定您获得的例外类型,否则您可能会冒险抓住其他人,例如KeyboardInterrupt
和SystemExit
。