"SystemError: error return without exception set" when using tf.data.Dataset.from_generator
"SystemError: error return without exception set" when using tf.data.Dataset.from_generator
我在使用 tf.data.Dataset.from_generator
时遇到了一个奇怪的 运行 时间错误。
import tensorflow as tf
def gen():
while True:
yield 0, 0
batch = (
tf.data.Dataset.from_generator(
gen, output_types=(tf.int32, tf.int32))
.batch(8)
.repeat()
.make_one_shot_iterator()
.get_next()
)
sess = tf.InteractiveSession()
sess.run(batch)
会像这样打印消息
Exception ignored in: <generator object _yield_value at 0x000001FD9ED6A7D8>
Traceback (most recent call last):
File "C:\Users\user209974\AppData\Local\Continuum\miniconda3\envs\tf\lib\site-packages\tensorflow\python\data\util\nest.py", line 100, in _yield_value
yield value
SystemError: error return without exception set
在调用 Session.run
时在 运行 时抛出错误,显然是每次调用生成器时。奇怪的是,尽管抛出了这个错误,但返回的值似乎是正确的。
那么是什么导致了这个错误以及如何消除它? (出于某种原因,在 gen
中删除批处理或返回单个值会使错误消失)。
编辑
我意识到在 PyCharm 下 运行 在调试模式下会出现这些错误。如果我 运行 python 控制台中的代码,作为脚本,或 PyCharm 但不在调试模式下,则不会打印这些消息。
这似乎是一个 Pycharm 问题。解决方案是在 pycharm 设置中设置此环境变量:
PYDEVD_USE_FRAME_EVAL=NO
Check this post that offers more information
我在使用 tf.data.Dataset.from_generator
时遇到了一个奇怪的 运行 时间错误。
import tensorflow as tf
def gen():
while True:
yield 0, 0
batch = (
tf.data.Dataset.from_generator(
gen, output_types=(tf.int32, tf.int32))
.batch(8)
.repeat()
.make_one_shot_iterator()
.get_next()
)
sess = tf.InteractiveSession()
sess.run(batch)
会像这样打印消息
Exception ignored in: <generator object _yield_value at 0x000001FD9ED6A7D8>
Traceback (most recent call last):
File "C:\Users\user209974\AppData\Local\Continuum\miniconda3\envs\tf\lib\site-packages\tensorflow\python\data\util\nest.py", line 100, in _yield_value
yield value
SystemError: error return without exception set
在调用 Session.run
时在 运行 时抛出错误,显然是每次调用生成器时。奇怪的是,尽管抛出了这个错误,但返回的值似乎是正确的。
那么是什么导致了这个错误以及如何消除它? (出于某种原因,在 gen
中删除批处理或返回单个值会使错误消失)。
编辑
我意识到在 PyCharm 下 运行 在调试模式下会出现这些错误。如果我 运行 python 控制台中的代码,作为脚本,或 PyCharm 但不在调试模式下,则不会打印这些消息。
这似乎是一个 Pycharm 问题。解决方案是在 pycharm 设置中设置此环境变量:
PYDEVD_USE_FRAME_EVAL=NO
Check this post that offers more information