0

我在互联网上搜索,但我仍然不明白为什么我的代码不起作用。我有一个名为 Era.py 的 Python 文件,在这个文件中我有这个类:

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!")

在另一个 Python 文件中,read_from_database.py 我有这个:

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)

但是当我尝试从 Era 导入时,输入时出现此错误: ImportError: cannot import name 'input' from 'Era'

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

4

1 回答 1

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课程,因为它可以通过多种方式进行简化。

于 2019-05-03T01:30:52.447 回答