提交 e18e4afc authored 作者: nouiz's avatar nouiz

Merge pull request #216 from goodfeli/missing_input_error_message

added verbose error message for function missing input
......@@ -5,6 +5,7 @@ from copy import copy
import graph
import utils
import toolbox
from theano import config
class InconsistencyError(Exception):
......@@ -232,6 +233,63 @@ class Env(utils.object2):
if hasattr(r, 'env') and r.env is not self:
raise Exception("%s is already owned by another env" % r)
if r.owner is None and not isinstance(r, graph.Value) and r not in self.inputs:
#Verbose error message
#Show a complete chain of variables from the missing input to an output
if config.exception_verbosity == 'high':
def find_path_to(output_var, input_var):
""" Returns a list of each variable on a (not necessarily unique)
path from input_var to output_var, where each variable in the
list has the preceding variable as one of its inputs.
Returns None if no path exists"""
#If output and input are the same we have a singleton path
if output_var is input_var:
return [output_var]
#If output has no inputs then there is no path
owner = output_var.owner
if owner is None:
return None
#If input_var is an input to the output node, there is a
#simple two element path
inputs = owner.inputs
if input_var in inputs:
return [input_var, output_var]
#Otherwise we must recurse by searching for a path to one
#of our inputs, then appending the output to that path
for ipt in inputs:
path = find_path_to(ipt, input_var)
if path is not None:
path.append(output_var)
return path
#Since none of the above methods returned a path, there is none
return None
#Try different outputs until we find one that has a path to the missing input
for output in self.outputs:
path = find_path_to(output, r)
if path is not None:
break
#if there is no path then r isn't really a graph input so we shouldn't be running error
#handler code in the first place
assert path is not None
raise TypeError('A variable that is an input to the graph was neither provided as an '
'input to the function nor given a value. A chain of variables leading from '
'this input to an output is '+str(path)+'. This chain may not be unique')
#Standard error message
raise TypeError("An input of the graph, used to compute "+str(node)+", was not provided and not given a value", r)
for node in new_nodes:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论