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

我正在制作一个实用程序,其中内置了多个程序,但我对程序进行了一些更改,以便在用户提示时重新运行,然后由于某种原因,我面临错误


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()


Qyouu
浏览 119回答 1
1回答

侃侃无极

“模块级别”仅意味着脚本中不属于类或函数的部分。您在那里定义的任何名称都会直接进入模块名称空间。因此,错误消息只是说要移动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 osimport sysimport timeimport pywhatkit as whatsappfrom speedtest import Speedtestfrom tkinter import *from tkinter import messageboxfrom os import listdirfrom PIL import Imagedef main():事实上,口译员真正关心的只是台词from tkinter import *。其他的是约定和可读性的问题。CPython 对函数内部的局部命名空间进行优化,要求解释器预先知道所有局部变量的名称。星号导入可以防止这种情况发生,因为在运行导入模块之前您不知道导入的模块中将包含什么名称。全局命名空间没有此限制,因此您可以在那里进行星号导入。Python 是一种供成年人使用的语言。仅仅因为某些东西是“不好的做法”或不可维护并不意味着它是语法错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python