关于载入本地模块的几点疑问
代码
import calculator #报错
import game
import random1
from sys import exit
def tool():
ans=1
a='按0离开程序;\n按1玩石头剪刀布;\n按2运行随机数生成;\n按3运行四则运算计算器。'
print('欢迎来到全能工具箱')
while ans==1 or 2 or 3:
ans=int(input(a+'\n请输入指定数字:'))
if ans==1:
game.play()
elif ans==2:
random1.randomno()
elif ans==3:
calculator.cal()#报错
elif ans==0:
exit()
tool()#报错
本地模块
import tools#报错
def cal():
print('计算器')
ask=1
while ask==1:
no1=int(input('输入第一个数:'))
symbol=str(input('输入运算符号:'))
no2=int(input('请输入第二个数:'))
if symbol=='+':
ans=no1+no2
print(ans)
elif symbol=='-':
ans=no1-no2
print(ans)
elif symbol=='*':
ans=no1*no2
print(ans)
elif symbol=='/':
ans=no1/no2
print(ans)
else:
print('error')
ask=int(input('按1继续;按0结束程序,请输入:'))
if ask==0:
tools.tool()
报错
报错截图
报错文字
Traceback (most recent call last):
File “C:\Users\abc\Documents\Python\tools\tools(2.0)\tools.py”, line 1, in
import calculator
File “C:\Users\abc\Documents\Python\tools\tools(2.0)\calculator.py”, line 1, in
import tools
File “C:\Users\abc\Documents\Python\tools\tools(2.0)\tools.py”, line 19, in
tool()
File “C:\Users\abc\Documents\Python\tools\tools(2.0)\tools.py”, line 16, in tool
calculator.cal()
AttributeError: partially initialized module ‘calculator’ has no attribute ‘cal’ (most likely due to a circular import)
疑问
我想问下如何解决、为什么会报错。
我一开始以为是跟其他模块冲突,但是我改了名,还是会报错。 我其他的模块都不会报错。
原因应该是
tools.py
导入calculator.py
,calculator.py
又导入tools.py
. (circular import), 把 calculator.py 的第一行import tools
移除就好了.另外,
calculator.py
又调用tools.tool()
, 这问题是程序设计的问题, 如果你真的这么作, 就会变成重复的循环调用. (A call B
andB call A
).设计的方式应该是