我正在使用
if tf.__version__ < x.x.x:
PyCharm中的语句,可以在许多TensorFlow GitHub示例中找到,如下所示:
# tensorflow_version_test.py
import tensorflow as tf
#######################################################################################################################
def main():
if tf.__version__ < "1.4.0":
print("ERROR: TensorFlow version is older than 1.4.0, upgrade to 1.4.0 or higher before continuing !!!")
return
# end if
print("TensorFlow version is >= 1.4.0, continuing . . .")
# rest of program would go here . . .
# end main
#######################################################################################################################
if __name__ == "__main__":
main()
这很好用,我现在在TensorFlow 1.4.0上,如果我按上面那样运行这个脚本,则不会显示错误消息,如果我将if
语句更改为例如2.4。 0(当然还没有出现)然后错误显示为预期并且程序退出。
我遇到的问题是PyCharm在if语句中显示以下警告:
Cannot find reference '__version__' in '__init__.py'
以下是截图:
如果我选择PyCharm灯泡图标,我会得到以下选项:
其中没有一个特别有吸引力。
目前,我正在选择最后一个选项“Suppress for statement”,它在if语句上方添加了这一行
# noinspection PyUnresolvedReferences
我担心的是,我正在编写许多其他人将使用的文档,其中一些将使用PyCharm,其中一些人将不可避免地使用不同的编辑器。
出于这个原因,我无法更改任何TensorFlow init .py文件,因为这会在我的计算机上创建自定义安装,任何关注我的文档的人都会看到不同的结果如果他们使用PyCharm屏幕。此外,我正在使用pip来安装软件包,所以我甚至不确定这是否可行,但即使它仍然不是一个可接受的选择。
同样,我不想包含特定于PyCharm的注释行,因为这会对那些不使用PyCharm的人造成混淆。
我真的不想完全禁用此检查,因为我发现PyCharm的警告在很多情况下非常有用,因此我不想禁用它们。
通过谷歌搜索这个问题,我发现了post。
建议的答案是编辑 init .py文件,由于上述原因我不想这样做,或者将import语句更改为
from somePackage import module1, module2, module3
这似乎不适用于我的情况,因为我完全使用语句导入TensorFlow
import tensorflow as tf
即使修改import语句以防止此警告在某种程度上是可能的,我仍然不会这样做,因为这会导致非PyCharm用户的混淆,并使我的示例与所有其他TensorFlow文档和示例不同。
目前看来这是我能做的最好的事情:
# this next comment line is necessary to avoid a false warning if using the editor PyCharm
# noinspection PyUnresolvedReferences
if tf.__version__ < "1.4.0":
print("ERROR: TensorFlow version is older than 1.4.0, upgrade to 1.4.0 or higher before continuing !!!")
return
# end if
这里有什么我想念的吗?有关更好的方法的建议吗?
答案 0 :(得分:1)
tf.__version__
是动态生成的,因此各种import
黑客无法正常工作。
解决警告的简单方法是使用getattr,如:
import tensorflow as tf
if getattr(tf, '__version__') < "1.4.0":
....