Прямое решение состоит в том, чтобы использовать предложение try
... finally
(на самом деле может быть лучше поместить предложение в код, который запускает модульные тесты, а не непосредственно в модульные тесты):
def test_1():
x = tf.get_variable('x', initializer=1)
try:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(4 / 0)
print(sess.run(x))
finally:
tf.reset_default_graph()
def test_2():
x = tf.get_variable('x', initializer=1)
try:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(x))
finally:
tf.reset_default_graph()
Другое чистое решение - использовать один график для каждого модульного теста, как показано в предыдущем ответе. Вот альтернативное решение, основанное на этой идее с немного упрощенным синтаксисом:
def test_1():
with tf.Graph().as_default(), tf.Session() as sess:
x = tf.get_variable('x', initializer=1)
sess.run(tf.global_variables_initializer())
print(4 / 0)
print(sess.run(x))
def test_2():
with tf.Graph().as_default(), tf.Session() as sess:
x = tf.get_variable('x', initializer=1)
sess.run(tf.global_variables_initializer())
print(sess.run(x))
Подобно первому решению, оператор with
может также помещаться вокруг кода, который запускает модульные тесты, а не повторяться в каждом модульном тесте.