名称错误:未定义全局名称“程序”“停止”“分钟”

2024-05-12 21:00:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些关于我的代码的帮助,我正在使用两个不同的函数,一个用于选择数据库中的数据,另一个用于通过键盘控制向右移动。我想减少代码以避免在一个函数中添加相同的代码行。在

但是,当我尝试以下操作时:

import move_right

class MyClass(xbmcgui.WindowXML):
    def GoRight(self):
        move_right.GoRight(self)

我将得到一个错误:名称错误:未定义全局名称“程序停止分钟”。

错误跳到这一行:

^{pr2}$

这是行动_对.py找到错误的脚本:

import datetime
import time
import xbmc
import xbmcgui


prog_id = 0
select_db_flag = False

def select_db(self):
     program_button = [elem.control for elem in self.program_buttons]
     programs_id = list()
     program_width = list()
     positions_X = list()
     positions_Y = list()

     for elem in program_button:
         programs_id.append(elem.getId())
         positions_X.append(elem.getX())
         positions_Y.append(elem.getY())
         program_width.append(elem.getWidth())
     programs_id = map(str, programs_id)
     posX = map(str, positions_X)
     posY = map(str, positions_Y)
     program_width = map(str, program_width)

     for pos_X, pos_Y, prog_id, prog_width in zip(positions_X, positions_Y, programs_id, program_width):
         if select_db_flag == True:
             profilePath = xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide', 'source.db'))
             conn1 = database.connect(profilePath)
             cur1 = conn1.cursor()
             cur1.execute('SELECT stop_date FROM programs where button_id=?', [prog_id])
             stop_date = cur1.fetchone()

             if stop_date is not None:
                 stop_date = str(stop_date[0])
                 stop_time = time.strptime(str(stop_date), '%Y%m%d%H%M%S')
                 stop_time = datetime.datetime.fromtimestamp(time.mktime(stop_time))
                 program_stop_hours = stop_time.strftime('%H')
                 program_stop_minutes = stop_time.strftime('%M')
                 program_AM_PM = stop_time.strftime('%p')
                 half_hour = str(self.getControl(344).getLabel())
                 one_hour = str(self.getControl(345).getLabel())
                 one_hour_half = str(self.getControl(346).getLabel())
                 epg_time_1 = time.strptime(half_hour, '%I:%M%p')
                 epg_time_2 = time.strptime(one_hour, '%I:%M%p')
                 epg_time_3 = time.strptime(one_hour_half, '%I:%M%p')


                  program_stop_time = program_stop_hours +':' + program_stop_minutes + program_AM_PM
                  program_stop_time = time.strptime(program_stop_time, '%I:%M%p')




def GoRight(self): 
    if int(pos_X) == 616 and int(prog_width) == 515:
        if program_stop_minutes == '05':
            programs_width = 399 
            self.getControl(int(prog_id)).setWidth(int(programs_width))
            nextprogram = int(prog_id) + 1
            nextprogramX = self.getControl(int(nextprogram)).getX()
            nextprogram_width = self.getControl(int(nextprogram)).getWidth()

            self.getControl(int(nextprograms)).setPosition(780, int(pos_Y))
            self.select_db()
            select_db_flag = True

当我想从select_db函数调用以获得timedelta的返回输出时,我想定义program_stop_minutes,但我不知道如何做到这一点。在

当我想从select_db函数调用timedelta的返回输出时,你能帮助我如何定义program_stop_minutes?在


Tags: selfiddbtimeprogramwidthselectint
1条回答
网友
1楼 · 发布于 2024-05-12 21:00:45

正如错误消息明确指出的那样,program_stop_minutes不是全局变量。您在select_db中定义它,因此它在该函数的作用域内只能访问。如果要从其他函数(如GoRight)访问它,则需要在全局范围内定义变量返回函数的值。在

全球范围

program_stop_minutes = 0

def select_db():
    global program_stop_minutes
    # Do stuff here then modify program_stop_minutes
    program_stop_minutes = stop_time.strftime('%M')

def GoRight():
    global program_stop_minutes
    if program_stop_minutes == '05':
        # Do some other stuff   

select_db返回值

如果您想从select_db返回信息,而不是使用全局变量,则可以执行以下操作:

^{pr2}$

如果需要从函数返回多个值,则可以作为元组返回。您可以用这种方式返回任意数量的参数。在

def select_db():
    program_stop_minutes = stop_time.strftime('%M')
    epg_time_1 = time.strptime(half_hour, '%I:%M%p')

    return (program_stop_minutes, epg_time_1)

def GoRight():
    program_stop_minutes, epg_time_1 = select_db()
    if program_stop_minutes == '05':
        # Do some other stuff

作为补充说明,我不确定您为什么到处使用self变量。你认为这些都是一个类的方法吗?正如你目前写的,他们不是。它们只是函数。在

相关问题 更多 >