![](/img/trans.png)
[英]Why does Presidio StanzaNlpEngine throw NameError: name 'StanzaLanguage' 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.