当我的python作为Hive UDF因异常而失败时,我试图从程序中彻底退出。
这是一个例子:
SELECT TRANSFORM(id,name)USING ' D:\ Python27 \ python.exe streaming.py' AS(id字符串, name string,count integer)FROM hivesampletable;
#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
赞赏的想法
答案 0 :(得分:1)
如果你基本上想要吞下"例外,那么我建议你在except
块中明确调用sys.exit(0)
,它将退出程序并指示(从shell级别)程序是" OK"
e.g。你最终会得到一个真正干净的出口,即使是一个外壳,例如bash,将会看到"成功"。
注意:如果您想退出而不打印任何内容但允许shell知道出现问题,请将非零错误代码传递给exit
。
对OP评论的回应:
嗯,我不会指望,因为你明确地吞下了这个例外...下一步可能是打印出异常是什么,正如另一个答案中所建议的那样,并从那里开始,具体取决于异常是什么。
可能有所贡献的另一件事是我不认为你的Python脚本符合你的TRANSFORM
声明,因此可能会导致这个问题。
另外,如果没有初始化name
,那么你引用NameError: name 'name' is not defined
(这可能是例外 - // Closes the Responsive Menu on Menu Item Click
$('.navbar-collapse ul li a').click(function() {
if ($(this).attr('class') != 'dropdown-toggle active' && $(this).attr('class') != 'dropdown-toggle') {
$('.navbar-toggle:visible').click();
}
});
)。
答案 1 :(得分:1)
使用pass语句可以忽略错误并将控制流程返回到程序中。
var foo = [];
$('.box22').each(function(x,v){
var temp =[];
$(v).find('select option').each(function() {
var selected = $(this).attr("selected");
var selectedvalue = $(this).attr("value");
if(selected = "selected")
{
temp.push(selectedvalue);
}
});
foo[x] = temp;
console.log(temp);
});