为了账号安全,请及时绑定邮箱和手机立即绑定

唯一导入*仅允许在模块级别

唯一导入*仅允许在模块级别

Qyouu 2023-06-27 13:12:31
我正在制作一个实用程序,其中内置了多个程序,但我对程序进行了一些更改,以便在用户提示时重新运行,然后由于某种原因,我面临错误import * only allowed at module level这是我的代码def main():        import os    import sys    import time    import pywhatkit as whatsapp    from speedtest import Speedtest    from tkinter import *    from tkinter import messagebox    from os import listdir    from PIL import Image    print("*"*30)    print("Utility Build v1: Starting")    print("*"*30)    time.sleep(3)    print("NOTE: Before using this program for repairing corrupted disk, please locate this utility .py file into the corrupted storage. Thanks")    time.sleep(3)    print("*"*30)    print("*"*30)    print("Commands: Choose by inputting allocated number")    print("Utility 1: Speed Test")    print("Utility 2: Whatsapp Message Automation")    time.sleep(2)    print("Please Wait...Loading")    time.sleep(4)    print("Utility 3: Disk/Removable Storage Repair(a.k.a Dr Corrupt)")    print("Utility 4: Python .py status monitor")    print("*"*30)    print("*"*30)    print("q = Quit Utility Program")    input_ = input(": ")    if input_ == "q":        exit()           if input_ == "1":        time.sleep(2)        print("*"*30)        print("Speed Test: Starting")        print("*"*30)                st = Speedtest()        Download_ = print("Your connection download speed is:", st.download())        Upload_ = print("Your connection upload speed is:", st.upload())        Download1_ = st.download()        Upload1_ = st.upload()        print("*"*30)        print("Speed Test: Finishing Up!")        print("*"*30)        answer = input("Would you like results? ")        if answer == "yes":            print("NOTE: The first 2 digits frm the left is your internet speed")            time.sleep(2)            top = Tk()            top.geometry("100x100")            messagebox.showinfo("Speed Test: Download", Download1_)            top.mainloop()
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

“模块级别”仅意味着脚本中不属于类或函数的部分。您在那里定义的任何名称都会直接进入模块名称空间。


因此,错误消息只是说要移动


def main():

    

    import os

    import sys

    import time

    import pywhatkit as whatsapp

    from speedtest import Speedtest

    from tkinter import *

    from tkinter import messagebox

    from os import listdir

    from PIL import Image


import os

import sys

import time

import pywhatkit as whatsapp

from speedtest import Speedtest

from tkinter import *

from tkinter import messagebox

from os import listdir

from PIL import Image


def main():

事实上,口译员真正关心的只是台词from tkinter import *。其他的是约定和可读性的问题。


CPython 对函数内部的局部命名空间进行优化,要求解释器预先知道所有局部变量的名称。星号导入可以防止这种情况发生,因为在运行导入模块之前您不知道导入的模块中将包含什么名称。全局命名空间没有此限制,因此您可以在那里进行星号导入。


Python 是一种供成年人使用的语言。仅仅因为某些东西是“不好的做法”或不可维护并不意味着它是语法错误。


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信