Another "ImportError: cannot import name"
Another "ImportError: cannot import name"
我有四个文件:menu.py
、notebook.py
、__init__.py
和 test.py
,按照@afaq 的建议排列。
我的notebook.py
:
class Note:
def __init__(self,memo,tag = ''):
self.memo = memo
self.tag = tag
def match(self,filter):
'''determine if this note matches the filter text, return
true if match, false if not'''
return filter in self.memo or filter in self.tag
class Notebook:
def __init__(self):
'''ininitalize a notebook with empty list'''
self.note = []
def search(self,filter):
'''Find all notes that match the given filter string.'''
return [note for note in self.note if note.match(filter)]
和menu.py
:(已编辑)
import sys
from .notebook import Note, Notebook
class Menu:
'''Display a menu and respond to choices when run.'''
def __init__(self):
self.notebook = Notebook()
self.choices = {
"1": self.search_note,
"2": self.quit
}
def display_menu(self):
print("""
Notebook Menu
1. Search Notes
2. Quit
""")
def run(self):
'''Display the menu and respond to choices.'''
while True:
self.display_menu()
choice = input("Choice is: ")
action = self.choices.get(choice)
if action:
action()
else:
print("{0} is not a valid choice".format(choice))
def search_note(self):
'''search for text and display all notes contain it'''
filter = input("Search for: ")
notes = self.notebook.search(filter)
self.show_note()
def quit(self):
print("Bye bye")
sys.exit(0)
我的__init__.py
是空的
我的test.py
:
from Notebook.my_notebook.menu import Menu
if __name__ == "__main__":
Menu().run()
当我运行 test.py
, python returns 我这个错误:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from Notebook.my_notebook.menu import Menu
ModuleNotFoundError: No module named 'Notebook'
我该如何解决这个问题?
在单独的模块中创建 if __name__ == "__main__":
调用。尝试执行该模块时不能进行相对导入。
勾选Ultimate answer to relative python imports
menu.py
import sys
from .notebook import Note, Notebook
class Menu:
'''Display a menu and respond to choices when run.'''
def __init__(self):
self.notebook = Notebook()
self.choices = {
"1": self.search_note,
"2": self.quit
}
def display_menu(self):
print("""
Notebook Menu
1. Search Notes
2. Quit
""")
def run(self):
'''Display the menu and respond to choices.'''
while True:
self.display_menu()
choice = input("Choice is: ")
action = self.choices.get(choice)
if action:
action()
else:
print("{0} is not a valid choice".format(choice))
def search_note(self):
'''search for text and display all notes contain it'''
filter = input("Search for: ")
notes = self.notebook.search(filter)
self.show_note()
def quit(self):
print("Bye bye")
sys.exit(0)
你的目录结构应该是这样的。
你的包结构应该是这样的。
执行程序代码如下所示
我有四个文件:menu.py
、notebook.py
、__init__.py
和 test.py
,按照@afaq 的建议排列。
我的notebook.py
:
class Note:
def __init__(self,memo,tag = ''):
self.memo = memo
self.tag = tag
def match(self,filter):
'''determine if this note matches the filter text, return
true if match, false if not'''
return filter in self.memo or filter in self.tag
class Notebook:
def __init__(self):
'''ininitalize a notebook with empty list'''
self.note = []
def search(self,filter):
'''Find all notes that match the given filter string.'''
return [note for note in self.note if note.match(filter)]
和menu.py
:(已编辑)
import sys
from .notebook import Note, Notebook
class Menu:
'''Display a menu and respond to choices when run.'''
def __init__(self):
self.notebook = Notebook()
self.choices = {
"1": self.search_note,
"2": self.quit
}
def display_menu(self):
print("""
Notebook Menu
1. Search Notes
2. Quit
""")
def run(self):
'''Display the menu and respond to choices.'''
while True:
self.display_menu()
choice = input("Choice is: ")
action = self.choices.get(choice)
if action:
action()
else:
print("{0} is not a valid choice".format(choice))
def search_note(self):
'''search for text and display all notes contain it'''
filter = input("Search for: ")
notes = self.notebook.search(filter)
self.show_note()
def quit(self):
print("Bye bye")
sys.exit(0)
我的__init__.py
是空的
我的test.py
:
from Notebook.my_notebook.menu import Menu
if __name__ == "__main__":
Menu().run()
当我运行 test.py
, python returns 我这个错误:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from Notebook.my_notebook.menu import Menu
ModuleNotFoundError: No module named 'Notebook'
我该如何解决这个问题?
在单独的模块中创建 if __name__ == "__main__":
调用。尝试执行该模块时不能进行相对导入。
勾选Ultimate answer to relative python imports
menu.py
import sys
from .notebook import Note, Notebook
class Menu:
'''Display a menu and respond to choices when run.'''
def __init__(self):
self.notebook = Notebook()
self.choices = {
"1": self.search_note,
"2": self.quit
}
def display_menu(self):
print("""
Notebook Menu
1. Search Notes
2. Quit
""")
def run(self):
'''Display the menu and respond to choices.'''
while True:
self.display_menu()
choice = input("Choice is: ")
action = self.choices.get(choice)
if action:
action()
else:
print("{0} is not a valid choice".format(choice))
def search_note(self):
'''search for text and display all notes contain it'''
filter = input("Search for: ")
notes = self.notebook.search(filter)
self.show_note()
def quit(self):
print("Bye bye")
sys.exit(0)
你的目录结构应该是这样的。
你的包结构应该是这样的。
执行程序代码如下所示