我在其中一台服务器上从Python 2.6中的子进程模块中获取了一个未知异常。
想要一些帮助在这里找到问题
运行代码:
ret = u.run('''echo''')
u.run来自这里:
def run(cmd):
cmd = '(' + cmd + ') 2>&1';
info("Trying to run : " + cmd)
try:
ret = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
return ret
except subprocess.CalledProcessError, e:
die("Error - Output:\n" + e.output + "\nExternal cmd return code: " + str(e.returncode) + "\nFor command: " + e.cmd)
except:
die("Unknown error running:\n" + cmd)
我的输出是这样的:
Trying to run : (echo) 2>&1
DIE: Unknown error running:
(echo) 2>&1
任何想法是什么“未知错误?”除了CalledProcessError
之外,没有针对子进程记录的异常答案 0 :(得分:1)
优良作法是捕捉异常,但像这样的全能except
会让许多程序员想要打破你的手指非常不开心,因为Unknown error running: (echo) 2>&1
无助于所有。之所以没有关于"未知错误"是因为你打印的全部。
有两个解决方案:让Python自己引发异常(所以你有一个回溯并且可以找出你出错的地方)或者上面提到的@dano,在你的处理程序中打印实际的异常,如下所示:
def run(cmd):
cmd = '(' + cmd + ') 2>&1';
info("Trying to run : " + cmd)
try:
ret = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
return ret
except subprocess.CalledProcessError, e:
die("Error - Output:\n" + e.output + "\nExternal cmd return code: " + str(e.returncode) + "\nFor command: " + e.cmd)
except Exception as e:
die("Uncaught error: " + str(e) + '\nrunning:\n' + cmd)
这将告诉您错误是什么,以便您可以修复它(如果是编程错误)或为导致问题的任何内容创建特定的错误处理程序。