python - ctypes.ArgumentError:参数 3:: 调用 Python 对象时超出最大递归深度
问题描述
我是 python 新手。我正在尝试使用 Kivy 作为 GUI 在 python 中创建注册/登录系统。当涉及到单个 .py 文件时,我的代码就像一个魅力,但是,当我调用(使用import Login
)另一个 .py 脚本时,一切都崩溃了。
这是我的 Register.py 文件:
import mysql.connector
from mysql.connector import Error
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.core.window import Window
from kivy.config import Config
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget
from kivy.lang import Builder
db = mysql.connector.connect(host="localhost",
user="user",
passwd="password",
db="database",)
mycursor = db.cursor()
Builder.load_file("Stuff.kv")
condse = "@", "mail", ".",
class Stuff(Widget):
def register(self):
email = (self.ids.email.text)
pw = (self.ids.password.text)
mycursor.execute("select count(*) from email_password where email = %s", (email,))
result = mycursor.fetchone()[0]
if result < 1:
if len(email) > 1:
if all(condse in email for condse in condse):
if not pw.islower() and not pw.isupper() or pw.isupper():
Acc = email, pw
Form = "INSERT INTO email_password (email, password) VALUES (%s, %s)"
mycursor.execute(Form, Acc)
db.commit()
import Login #<-----------THIS IS THE PROBLEMATIC IMPORT
def quit(self):
Register().stop()
class Register(App):
def build(self):
Window.size = (1920, 1080)
Window.fullscreen = False
return Stuff()
Register().run()
最小的 Register.py 文件
class Stuff(Widget):
def register(self):
import Login #<-------- Problematic Import
class Register(App):
def build(self):
Window.size = (1920, 1080)
Window.fullscreen = False
return Stuff()
Register().run()
这是我的 Login.py 文件:
import mysql.connector
from mysql.connector import Error
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.core.window import Window
from kivy.config import Config
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget
from kivy.lang import Builder
db = mysql.connector.connect(host="localhost",
user="user",
passwd="password",
db="database",)
mycursor = db.cursor()
Builder.load_file("Stuff1.kv")
condse = "@", "mail", ".",
class Stuff1(Widget):
def login(self):
email1 = (self.ids.email.text)
pw1 = (self.ids.password.text)
mycursor.execute("select count(*) from email_password where email = %s", (email1,))
result = mycursor.fetchone()[0]
if result > 1 and len(email1) > 1:
if not pw1.islower() and not pw1.isupper() or pw1.isupper() and len(pw1) > 8:
Acc = email1, pw1
Form = "INSERT INTO email_password (email, password) VALUES (%s, %s)"
mycursor.execute(Form, Acc)
else:
print("The password must contain 8 characters and at least 1 capital letter")
else:
pass
def quit(self):
Login().stop()
class Login(App):
def build(self):
Window.size = (1920, 1080)
Window.fullscreen = False
return Stuff1()
Login().run()
db.commit()
最小登录.py
class Stuff1(Widget):
def login(self):
def quit(self): #this is a button function that i use to quit (not very important, it's just to tell you what it does)
Login().stop()
class Login(App):
def build(self):
Window.size = (1920, 1080)
Window.fullscreen = False
return Stuff1()
Login().run()
当我单击“提交”按钮( def register(self):
)时,它应该关闭“注册”脚本并打开“登录”脚本,但相反,它会崩溃并在运行控制台中发送此错误:
Traceback (most recent call last):
File "C:\Users\Mattia Antonacci\Desktop\Robe\RipetraMySql\venv\lib\site-packages\kivy\input\providers\wm_pen.py", line 74, in _pen_wndProc
return windll.user32.CallWindowProcW(self.old_windProc,
ctypes.ArgumentError: argument 3: <class 'RecursionError'>: maximum recursion depth exceeded while calling a Python object
我希望有一个人可以帮助我...
解决方案
从您的最小示例中,我认为这应该可以解决您的问题。当您导入时,它通常会在每次不“重新加载”文件时引入代码。从另一个 python 脚本运行 python 脚本通常你会希望可执行代码在函数中并将它们称为module.function()
.
此外,您还需要将“主要”可执行代码放入if __name__ == '__main__':
语句中。这允许文件既可以运行python foo.py
也可以导入,import foo
否则,当您import foo
将执行所有代码时。请注意,即使多个地方导入同一个库,它通常也只会真正导入一次。
import Login
class Stuff(Widget):
def register(self):
#import Login #<-------- Problematic Import
Login.Login().run()
class Register(App):
def build(self):
Window.size = (1920, 1080)
Window.fullscreen = False
return Stuff()
if __name__ == '__main__':
Register().run()
登录.py
class Stuff1(Widget):
def login(self):
pass
def quit(self): #this is a button function that i use to quit (not very important, it's just to tell you what it does)
Login().stop()
class Login(App):
def build(self):
Window.size = (1920, 1080)
Window.fullscreen = False
return Stuff1()
#This makes it so the code ONLY runs when
# this is the script is called from python vs. import.
# i.e. python Login.py
if __name__ == '__main__':
Login().run()
推荐阅读
- php - Laravel 作曲家安装给出错误“您的锁定文件不包含兼容的软件包集,请运行作曲家更新”
- javascript - RTCPeerConnection 如何使用 STUN/TURN 服务器阵列?
- html - 用css倾斜菜单项,取消倾斜它不起作用的文本
- java - Castor 读取文本元素的属性
- javascript - 上传新图像后需要重置缩放并删除旧图像缩放不会因上传新图像而重置
- javascript - WebpackError: TypeError: p5__WEBPACK_IMPORTED_MODULE_4___default.a 不是构造函数
- macos - 为什么已经安装了 pip install 依赖项?
- php - Chrome 导出网页 - 不保存对 HTML 所做的更改
- android - 你能从解析查询中提取答案吗?
- c# - 在 c# 中使用 HMAC 密钥将文件上传到 Google Cloud Storage