首页 > 解决方案 > 为什么我的 python 脚本运行正常,但在我尝试跟踪它时却没有?

问题描述

我正在用 pygame 制作游戏,但遇到了一些问题。游戏经常无缘无故变慢,所以我尝试使用 python 内置的跟踪模块对其进行跟踪。但是,由于某种原因,当我正常执行它时,它可以完美运行

py  main.py

但是当我这样做的时候

py -m trace --trace main.py

它给了我以下错误:

File "F:\Downloads\Tanks (2)\Tanks\Tanks\Scripts\render.py", line 13, in load_UI
play_online_button = pgGui.elements.UIButton(pg.Rect((362  * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Online", main.UI_manager)
AttributeError: module '__main__' has no attribute 'res_multiplier'

而如下所示,属性 res_multiplier 显然是在 load_UI() 运行之前创建的。这可能是因为我正在导入其他脚本吗?

以下是相关的代码:

import Scripts.render as render

def start_game():
    WIDTH = 1024
    HEIGHT = 576
    
    global res_multiplier 
    res_multiplier = WIDTH / 1024

    #I skipped a bunch of stuff here

    render.load_UI()

    while running:
        #main game loop

if __name__ == __main__:
    start_game()

以及相关功能:

def load_UI():
    global fullscreen
    fullscreen = False
    
    #Startmenu
    global play_local_button, play_online_button, res_menu, quit_button
    play_online_button = pgGui.elements.UIButton(pg.Rect((362  * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Online", main.UI_manager)
    play_local_button = pgGui.elements.UIButton(pg.Rect((362  * main.res_multiplier, 290 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Lokaal", main.UI_manager)
    res_menu = pgGui.elements.UIDropDownMenu(["1920x1080","1600x900","1366x768","1280x720", "1024x576"], "1024x576", pg.Rect((700  * main.res_multiplier, 20 * main.res_multiplier), (300 * main.res_multiplier, 30 * main.res_multiplier)), main.UI_manager)
    quit_button = pgGui.elements.UIButton(pg.Rect((0  * main.res_multiplier, 0 * main.res_multiplier), (140 * main.res_multiplier, 40 * main.res_multiplier)), "Spel verlaten", main.UI_manager)
    
    #Onlinemenu
    global ip_text_entry, port_text_entry, connect_button, back_button, connect_error_text, client_port_text_entry
    ip_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362  * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
    ip_text_entry.set_text("127.0.0.1")
    port_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362  * main.res_multiplier, 240 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
    port_text_entry.set_text("1234")
    client_port_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362  * main.res_multiplier, 280 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
    client_port_text_entry.set_text("1235")    
    connect_button = pgGui.elements.UIButton(pg.Rect((362  * main.res_multiplier, 320 * main.res_multiplier), (300 * main.res_multiplier, 50 * main.res_multiplier)), "Verbinden & Spelen", main.UI_manager)
    back_button = pgGui.elements.UIButton(pg.Rect((0  * main.res_multiplier, 0 * main.res_multiplier), (260 * main.res_multiplier, 40 * main.res_multiplier)), "Terug naar het startmenu", main.UI_manager)
    connect_error_text = pgGui.elements.UITextBox("We kunnen geen verbinding maken met de server. Controleer of de server op het goede ip en poort is ingesteld en of je ze hier goed hebt ingevuld.", pg.Rect((690  * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 130 * main.res_multiplier)), main.UI_manager)
    hide_list = [ip_text_entry, port_text_entry, connect_button, back_button, connect_error_text, client_port_text_entry]
    for x in hide_list:
        x.hide()

标签: pythonpython-importtrace

解决方案


res_multiplier您应该作为参数传递:

#main
    render.load_UI(res_multiplier)

#render
def load_UI(res_multiplier):
    global fullscreen
    fullscreen = False
    
    #Startmenu
    global play_local_button, play_online_button, res_menu, quit_button
    play_online_button = pgGui.elements.UIButton(pg.Rect((362  * res_multiplier, 200 * res_multiplier), (300 * res_multiplier, 60 * res_multiplier)), "Speel Online", main.UI_manager)

推荐阅读