报错:ImportError: cannot import name 'Gift' from 'app.models.gift'

报错:ImportError: cannot import name 'Gift' from 'app.models.gift'_第1张图片
报错分析:
File “C:\Users\Administrator\Desktop\fisher\app\web\book.py”, line 9, in
from app.models.gift import Gift(在book.py里,从模型gift里导入Gift)
那么我们就从模型gift开始分析:
导入的时候会从顶层逐步往下进行,代码如下:
from flask import current_app
from app.models.base import db, Base
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey, desc,func
from sqlalchemy.orm import relationship
from app.models.wish import Wish
from app.spider.yushu_book import YuShuBook
当代码执行到from app.models.wish import Wish这里的时候,它将跳转到wish里面执行wish里面的代码,而gift模型下面的代码还没有被执行这就是导致出错的原因,为什么这么说呢?
那接下来我们在看wish模型里面的代码:
from app.models.base import Base, db
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey, desc, func
from sqlalchemy.orm import relationship

from app.models.gift import Gift
from app.spider.yushu_book import YuShuBook
代码从顶层逐步往下执行,当执行到from app.models.gift import Gift这里的时候,程序又跳转到gift模型里从上而下执行,这个地方就是问题的关键!
由于我们在book里已经导入了模型Gift,所以说这个流程将不会再次回到book里进行导入Gift这个类,
而在gift模型里,gift这个类却也没有被执行,这就是导致报错的原因。

解决方案:
因为礼物模型中的Gift类没有被执行引起的报错是因为,代码运行到from app.models.wish import Wish
这里的时候,被截胡了,我们只需要把这段导入代码放到代码的最下面,这样就避免了不执行。
同理,由于这里是一个循环的导入,那么我们在心愿模型中同样把导入gift的这段代码from app.models.gift import Gift
放到页面的最下面

你可能感兴趣的:(报错:ImportError: cannot import name 'Gift' from 'app.models.gift')