为什么我在Python脚本的except子句中得到UnboundLocalError?

时间:2017-06-05 19:04:36

标签: python exception exception-handling

我从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

我怎样才能做到这一点?

2 个答案:

答案 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进行一揽子异常捕获是一个坏主意。您应该指定您获得的例外类型,否则您可能会冒险抓住其他人,例如KeyboardInterruptSystemExit