无法从另一个python文件导入类

时间:2019-05-02 22:37:20

标签: python

我在互联网上进行搜索,但是我仍然不明白为什么我的代码无法正常工作。我有一个名为Era.py的Python文件,在该文件中有此类:

class oldUser:

    def __init__(self, login, password):
        self.login = login
        self.password = password
        results = "SELECT * FROM users WHERE username = '" + login + "'" + " AND password = " + "'" + password + "'"
        mycursor.execute(results)
        results = mycursor.fetchall()
        if not results:
            print("User don't exist or wrong login details! \n")
            print(add_to_database)
        else:
            print("Login successfully!")
            from Era import input
            execute = input(login)

在另一个Python文件read_from_database.py中,我有以下内容:

=IF(S56="P",CONCATENATE(LEFT(D58,5),$S$1,"PM"), CONCATENATE(LEFT(D58,5),$S$1,"AM"))

但是当我尝试从Era导入时,输入错误: ImportError:无法从“时代”导入名称“输入”

所有文件都在同一个文件夹中,理论上应该可以使用,一周前它可以使用

1 个答案:

答案 0 :(得分:0)

这里的问题是,您在尝试使用Python的内置input函数时会覆盖它。 您可以在input文件的Era.py类中看到此内容。 此类尝试使用内置的input函数来收集user_input。 因此,尝试from Era import input有时会失败,因为Python对要做的事情感到困惑。 最重要的是,除非您知道自己在做什么,否则永远不要覆盖任何内置函数(尤其是在您同样需要它们的情况下)。

此外,在Python中,类名通常以大写字母开头且不使用下划线,而函数和模块(例如此处的Era)只有小写字母和下划线。

因此,将您的代码更改为以下内容:

# era.py
class Input:
    def __init__(self, username):
        self.username = username
        close = ["X", "x"]
        print("So, let's start, sweetheart, press X when you want to stop. \n")
        user_input = input("")
        user_input = user_input.upper()
        while user_input not in close:
            user_in = Subject(username, user_input)
            user_input = input("")
        print("Good bye, sweetheart!")
# read_from_database.py
from era import Input

class OldUser:
    def __init__(self, login, password):
        self.login = login
        self.password = password
        results = "SELECT * FROM users WHERE username = '" + login + "'" + " AND password = " + "'" + password + "'"
        mycursor.execute(results)
        results = mycursor.fetchall()
        if not results:
            print("User don't exist or wrong login details! \n")
            print(add_to_database)
        else:
            print("Login successfully!")
            execute = Input(login)

您可能还想看看Input类,因为可以通过几种方式对其进行简化。