使用Python的Hive UDF - 在shell上打印异常

时间:2016-04-20 07:10:46

标签: python exception hive udf

在下面的代码中,每当发现异常时,我都想退出程序&在shell上打印异常

#stream.py
import hashlib
import sys
import os
import importlib


for line in sys.stdin.readlines():
        try:
            inpFile = "temp.py"
            execfile(inpFile)
            line1 = line.strip('\n').split('\t')
            print "\t".join(line1)
        except:
            #exception expected "temp.py:File Not Found", how do I exit the code & print the exception on console ? 
            sys.exit(1)

以下是调用UDF的转换查询:

  

创建表newtable作为Select TRANSFORM(id,name)USING   'python stream.py'为mytable的(id,name);

赞赏的想法。

2 个答案:

答案 0 :(得分:1)

如果您期望某个特定异常,那么您应该捕获它,而不是所有,这就是您正在做的事情。但是,您的代码中没有任何内容可以生成“找不到文件”!

编辑:问题代码已更改!我们真的希望陷入“一切”。我使用的是Exception,它几​​乎可以捕获所有内容,请参阅https://docs.python.org/2/library/exceptions.html

这使用Python 2语法:

import sys
for line in sys.stdin.readlines():
    try:    
        inpFile = "temp.py"
        execfile(inpFile)
        line1 = line.strip('\n').split('\t')
        print "\t".join(line1)

    except Exception as err:
        print >> sys.stderr, err   #  print to stderr (python 2 syntax)
        sys.exit(1)

答案 1 :(得分:1)

如果要捕获特定类型的异常(例如,检查IOError),可以使用

  except IOError as e:

并使用e.strerror

访问错误字符串

如果要捕获所有异常,可以使用sys.exc_info()[0]访问上一条错误消息

例如

try:
   1/0
except:
   print sys.exc_info()[0]

会打印

<type 'exceptions.ZeroDivisionError'>