【问题标题】:warning: 'X' in try block with 'except ImportError' should also be defined in except block警告:try 块中的 'X' 和 'except ImportError' 也应该在 except 块中定义
【发布时间】:2017-02-25 08:42:43
【问题描述】:

我正在尝试围绕两个类似的库编写一个包装器,这将为我提供一个通用的 API。示例:

# file XY.version.py
try:
    import X  # primary library
    __version__ = X.__version__
except ImportError:
    import Y  # fallback library
    __version__ = Y.__y_version__

PyCharm 显示警告 "'X' in try block with 'except ImportError' should also be defined in except block"。有没有简单的方法来重组代码以摆脱消息?当然,我可以在一开始或在except 块中执行X = None,但这感觉很不自然,因为我只需要导入X 即可获得版本。理想情况下,我不想在命名空间中保留导入的痕迹。当然,理论上我可以在try 块的末尾做del X,但这是我在任何地方都没有看到的东西,所以我假设人们不会使用它,顺便说一句。它不会删除 PyCharm 中的警告消息。

注意:我知道这与Checking module name inside 'except ImportError' 相似,但我相信这不一样。

【问题讨论】:

    标签: python pycharm


    【解决方案1】:

    大体上的东西呢:

    # file XY.version.py 
    try:
      import X  # primary library
      __version__ = X.__version__ 
    except ImportError:
      import Y as X # fallback library
      __version__ = X.__y_version__
    

    然后到处使用 X。

    【讨论】:

      【解决方案2】:

      我看不到任何可以解决此问题的答案,但请查看此链接: https://pythonbasics.org/try-except/

      通过例外和含义列表提供有关所需内容的线索。 因此,如果您只想摆脱烦人的消息,请像这样添加到异常中:

      try:
          import X  # primary library
          __version__ = X.__version__
      except ImportError(X):
          import Y  # fallback library
          __version__ = Y.__y_version__
      

      在一个类似的例子中对我有用,似乎不会影响结果。 我正在使用 Pycharm 2021.1 CE

      【讨论】:

        猜你喜欢
        • 2013-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        • 2021-10-26
        • 1970-01-01
        • 2013-02-20
        相关资源
        最近更新 更多