簡體   English   中英

為什么我的代碼會拋出“NameError: name 'ModuleNotFoundError' is not defined”錯誤?

[英]Why does my code throw "NameError: name 'ModuleNotFoundError' is not defined" error?

我正在本地安裝以下 Flask 應用程序: SolarPi 由於我必須安裝 raven 包並且在 github repo 上有拉取請求和未答復的問題,我認為代碼已損壞且不再維護。 盡管我不精通 Flask 和 Python,但我還是決定試一試並嘗試讓它運行。

當我跑

$ (.env) python manage.py server

代碼拋出以下錯誤:

Traceback (most recent call last):
  File "manage.py", line 9, in <module>
    from solarpi.app import create_app
  File "/home/path/solarpi/solarpi/app.py", line 7, in <module>
    from solarpi import public, weather, charts, statistics, tables
  File "/home/path/solarpi/solarpi/public/__init__.py", line 4, in <module>
    from . import views
  File "/home/path/solarpi/solarpi/public/views.py", line 11, in <module>
    from solarpi.public.helper import get_operating_days
  File "/home/path/solarpi/solarpi/public/helper.py", line 4, in <module>
    from pysolar.util import get_sunrise_sunset
  File "/home/path/solarpi/.venv/lib/python2.7/site-packages/pysolar/__init__.py", line 1, in <module>
    from . import \
  File "/home/path/solarpi/.venv/lib/python2.7/site-packages/pysolar/radiation.py", line 21, in <module>
    from . import numeric as math
  File "/home/path/solarpi/.venv/lib/python2.7/site-packages/pysolar/numeric.py", line 140, in <module>
    except ModuleNotFoundError:
NameError: name 'ModuleNotFoundError' is not defined

因為可以檢查文件 numeric.py

from math import degrees, cos, sin, radians, tan, pi
from math import acos, atan, asin, atan2, exp, e

current_mod = 'math'


def globals_import_from(module, name, name_as):
    """
    Does "from <module> import <name> as <name_as>" (globally)
    """
    ...
    ...
    Bunch of defs
    ...
    ...

try:
    import numpy
    use_numpy()
except ModuleNotFoundError:
    pass

ModuleNotFoundError只是一個例外條款。

這里的棘手之處在於,當未找到本地或全局名稱時引發的異常“NameError”捕獲另一個內置異常拋出的異常,在本例中為“ModuleNotFoundError”。 由於這些異常是內置的,我假設代碼只是寫入 python 3 而不是 python 2 所述。 我是否在這里遺漏了不會導致重構整個代碼的任何內容?

只是為了澄清評論:正如許多人所說, ModuleNotFoundError僅在 Python 3.6 及更高版本中可用,但必須使用 Python 2。 然而, ImportError異常在 Python 2 和 3 中可用,只是不太精確。

ImportError替換ModuleNotFoundError應該可以工作。

如果您仍在使用 Python 3.5 並遇到問題

    NameError: name 'ModuleNotFoundError' is not defined

例如,當運行 sphinx-build 或 pipdeptree 或從您自己的代碼時,然后轉到 PyPi 並下載並安裝模塊“importlib-metada”,“2”系列中的最新版本即 2.1.0。

版本 1 和 2 系列的 importlib-metadata 包括一個“compat.py”文件,該文件提供了缺失的“ModuleNotFoundError”功能。

不要使用更新/更高的 3 系列版本,因為這些版本適用於 Python 3.6 或更高版本,因此在“compat.py”文件中不再包含 ModuleNotFoundError 代碼。

問題不是缺少模塊,而是缺少異常類。 以下代碼:

try:
    import numpy
    use_numpy()
except ModuleNotFoundError:
    pass

應該嘗試導入numpy ,但如果失敗,只需忽略該失敗並繼續( pass = 什么都不做)。

但是,代碼試圖捕獲異常ModuleNotFoundError - 這在 python2.7 中不存在。

只需使用 python3 運行您的代碼即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM