异常时清除退出

ogsagwnx  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(310)

每当python as hive udf出现异常失败时,我都会尝试从程序中完全退出。
举个例子:
从hivesampletable中选择transform(id,name),使用'd:\python27\python.exe streaming.py'作为(id string,name string,count integer);


# streaming.py

import sys
from datetime import datetime

try:
   for line in sys.stdin.readlines(): 
       fields = line.strip().split('\t') 
       fields.append(len(name))
       print "\t".join(fields)
except:
   #I want program to break/clean exit with out printing (writing back) to table

赞赏的想法

vecaoik1

vecaoik11#

如果您本质上想“吞下”异常,那么我建议 except 阻止您显式调用 sys.exit(0) ,它将退出程序并(从shell级别)指示程序“正常”。
e、 g.你最终会得到一个真正干净的出口,即使是shell(例如bash)也会认为是“成功”。
注意:如果您想在不打印任何内容的情况下退出,但让shell知道出错了,请将非零错误代码传递给 exit .
对op评论的回应:
嗯,我没想到,既然你明确地接受了这个异常。。。
下一步可能是打印出异常是什么,正如在另一个答案中所建议的那样,然后从那里开始,这取决于异常是什么。
另一个可能的原因是我认为python脚本与 TRANSFORM 声明,所以这可能是促成这一问题的原因。
另外,您正在引用 name 在没有初始化的情况下(这可能是这里的例外-- NameError: name 'name' is not defined ).

5uzkadbs

5uzkadbs2#

pass语句将允许您忽略错误并将控制流返回到程序。

except Exception, e:
    pass 
    #To see your exception
    print str(e)
    # Alternately, you could get details of your exception using
    print sys.exc_info()

相关问题