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

如何解决唯一导入*仅在模块级别允许

我正在制作一个包含多个程序的实用程序,但是我对程序进行了一些更改,以便在用户提示时重新运行该程序,然后由于某种原因,我遇到了错误

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

            reply = input("Would like to leave Utility Build(yes) or go to home page?(no) ")

        else:
            reply1 = print("Would like to leave Utility Build(yes) or go to home page?(no) ")
            if reply1 == "yes":
                main()
            else:
                exit()

    if input_ == "2":
        whatsapp.sendwhatmsg("+61450776320","Hi,this is a test",0)

    if input_ == "3":
        
        for filename in listdir('./'):
          if filename.endswith('.png'):
            try:
              img = Image.open('./'+filename) # open the image file
              img.verify() # verify that it is,in fact an image
            except (IOError,SyntaxError) as e:
              print('Bad file:',filename) # print out the names of corrupt files

解决方法

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

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

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是一种用于成年人同意的语言。仅仅因为某些事情是“不好的做法”或无法维护就不会使它成为语法错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?