Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的问题:AttributeError:';非类型';对象没有属性';执行';_Python - Fatal编程技术网

Python的问题:AttributeError:';非类型';对象没有属性';执行';

Python的问题:AttributeError:';非类型';对象没有属性';执行';,python,Python,我开始学习Python,但我遇到了一些问题,我不知道确切的原因。我有这两个文件,据我所知,问题是两个文件之间的连接,我想。 我已经浏览了一些其他与之相关的问题,但似乎没有一个能解决我的问题 文件1,MysqlDB.py # -*- coding: utf-8 -*- import MySQLdb class DB: def __init__(self, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME, DB_CHARSET):

我开始学习Python,但我遇到了一些问题,我不知道确切的原因。我有这两个文件,据我所知,问题是两个文件之间的连接,我想。 我已经浏览了一些其他与之相关的问题,但似乎没有一个能解决我的问题

文件1,MysqlDB.py

# -*- coding: utf-8 -*-
import MySQLdb
class DB:
    def __init__(self, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME, DB_CHARSET):
        self.host = DB_HOST
        self.port = DB_PORT
        self.name = DB_NAME
        self.user = DB_USER
        self.password = DB_PASSWORD
        self.charset = DB_CHARSET

    def get_conn(self):
        try:
            if self.conn is None:
                self.conn = MySQLdb.connect(host = self.host,
                                            port = self.port,
                                            db = self.name,
                                            user = self.user,
                                            passwd = self.password,
                                            charset = self.charset)
                return self.conn
        except:
            print("Can't connect to database")

    def get_cursor(self):
        try:
            self.cursor = self.conn.cursor()
            return self.cursor
        except:
            print("Can't define cursor (cursor == None)")

    def close_conn(self):
        if self.conn:
            self.conn.close()
File2,users.py

# -*- coding: utf-8 -*-
import MysqlDB
from usersVO import UsersVO

class UsersDAO():
    def loginUser(self, tmpEmail, tmpPassword):
        OBJdb = MysqlDB.DB('127.0.0.1',3306,'root','','musica','utf8')
        OBJconn = OBJdb.get_conn()
        OBJcursor = OBJdb.get_cursor()

        queryLogin = "SELECT * FROM users WHERE email_USER LIKE '{}' and password_USER LIKE '{}'".format(tmpEmail, tmpPassword)

        OBJcursor.execute(queryLogin)

Class = UsersDAO()
Class.loginUser('test@email.com','test')
当我尝试在users.py上测试登录操作时,我总是得到以下结果:

"AttributeError: 'NoneType' object has no attribute 'execute'"

为什么OBJcursor得到None值?我该如何解决这个问题呢?

作为一个补充说明,除了案例(
MysqlDB
vs.
MysqlDB
)之外,拥有一个与您正在使用的另一个模块同名的模块是一个非常糟糕的主意,它在Windows上会崩溃,在Mac上可能会崩溃,也可能不会崩溃(很难预测),您的
get\u cursor
函数有一个空的
,除了:
它只打印
“不能定义游标(cursor==None)”
并返回
None
。这意味着你不知道什么失败了,只知道什么东西失败了。如果你想调试它,要么删除它,这样你就可以得到一个异常,要么把它改成
异常为e:
,然后打印一些有用的东西,比如
“不能定义游标(游标==None):{!r)”。格式化(e)
。你在
获取连接()中也有一个严重的问题
:第一次调用它时,它可能会工作,但之后每次调用它时,它都会返回
None
,因为
返回self.conn
仅发生在
内部,如果self.conn为None:
。此外,您也在执行相同的操作“隐藏错误以使其无法调试”
除了:
get\u conn()
中的东西,所以很可能是
get\u conn()
失败,返回了
None
,没有设置
self.conn
,这就是为什么
get\u cursor
也失败的原因。但是我们无法知道是否发生了这种情况。另一个注意事项是:不要使用
str.format
来填充SQL查询,使用数据库的查询参数。换句话说,
queryLogin=“选择…如%s和密码\u用户如%s”
,然后选择对象。执行(queryLogin,(tmpEmail,tmpPassword)
。有关如何执行以及为什么执行的详细信息,请参阅。