调用tensorflow.linalg.eig触发UnboundLocalError错误的原因排查
tf.linalg.eig 抛出 UnboundLocalError 的原因
代码示例
import tensorflow as tf X_tf = tf.Variable([[25, 2, 9], [5, 26, -5], [3, 7, -1]]) lambdas_X_tf, V_X_tf = tf.linalg.eig(X_tf)
报错信息
File "C:\Users\u1.conda\envs\py39\lib\site-packages\tensorflow\python\util\traceback_utils.py", line 153, in error_handler raise e.with_traceback(filtered_tb) from None File "C:\Users\u1.conda\envs\py39\lib\site-packages\tensorflow\python\ops\linalg_ops.py", line 406, in eig e, v = gen_linalg_ops.eig(tensor, Tout=out_dtype, compute_v=True, name=name) UnboundLocalError: local variable 'out_dtype' referenced before assignment
错误原因
这个错误源于你使用的TensorFlow版本存在逻辑bug:
tf.linalg.eig设计要求输入张量必须是复数类型(如tf.complex64/tf.complex128),但你传入的是默认整数类型的tf.Variable。- 在旧版本TensorFlow的
eig函数实现中,当输入不是复数类型时,代码分支没有正确初始化out_dtype变量,就直接在调用底层算子时引用了它,最终触发UnboundLocalError。
解决办法
- 直接将输入张量转换为复数类型:
X_tf = tf.Variable([[25, 2, 9], [5, 26, -5], [3, 7, -1]], dtype=tf.complex64)
- 升级到TensorFlow的新版本,新版本已修复该bug,会要么自动处理类型转换,要么给出更明确的参数类型错误提示。
内容的提问来源于stack exchange,提问作者Pritesh
相关产品推荐
相关产品推荐

