Python: Can‘t pop from an empty list

news2024/12/29 4:16:58

在 Python 中,如果尝试从一个空列表中弹出(pop)元素,会引发 IndexError 异常。这是因为 pop() 方法试图移除并返回列表中的最后一个元素,但在列表为空时无法执行此操作。那么具体情况可以跟着我看看下面文章。

在这里插入图片描述

1、问题背景

在编写一个 Python 程序时,由于需要在设备连接时更新设备标签并且将其传递给 Exchange,开发者遇到了一个问题:IndexError: pop from empty list。这表明在尝试从 Welcome.dev_label 列表中弹出元素时,该列表为空。

2、解决方案

为了解决这个问题,需要确保在从 Welcome.dev_label 列表中弹出元素之前,已经将设备标签添加到该列表中。

具体步骤如下:

  1. device_connected 函数中,当设备连接时,将设备标签添加到 Welcome.dev_label 列表。
  2. 在 Exchange 类中,在尝试从 Welcome.dev_label 列表中弹出元素之前,检查该列表是否为空。如果为空,则等待直到列表中有元素后再弹出。

代码例子

修改后的代码如下:

serial_list=[]
context = Context()
monitor = Monitor.from_netlink(context)
monitor.filter_by(subsystem='block',device_type='partition')
observer = GUDevMonitorObserver(monitor)

def device_connected(observer, device):
    Welcome.device_count+=1

    flag =False
    for iden in serial_list :
        if iden == device.__getitem__('ID_SERIAL_SHORT'):
            flag=True

    if flag ==False:
        serial_list.append(device.__getitem__('ID_SERIAL_SHORT'))
        Welcome.dev_label.append(str(device.__getitem__('ID_FS_LABEL')))
        size = len(Welcome.dev_label)
        label = gtk.Label('Device connected :: {0!r}'.format(Welcome.dev_label[size-1]))
        Welcome.vbox.pack_start(label)
        Welcome.window.show_all()

    if Welcome.device_count<2:
        label = gtk.Label('Connect the second device')
        Welcome.vbox.pack_start(label)
        Welcome.window.show_all()

    else :
        # 等待直到 Welcome.dev_label 列表中有元素后再弹出
        while len(Welcome.dev_label) == 0:
            pass
        Exchange()

observer.connect("device-added",device_connected)
monitor.start()

class Welcome:
    device_count = 0    
    window = gtk.Window()
    vbox= gtk.VBox(False, 5)
    dev_label = []

    def __init__(self):

        self.window.set_default_size(300, 300)
        self.window.set_title("Welcome")

        label = gtk.Label("Connect the desired device")

        self.vbox.pack_start(label)
        self.window.add(self.vbox)

        self.window.connect("destroy", lambda q: gtk.main_quit())
        self.window.show_all()

class Exchange:
    def __init__(self):

        # 确保在从 Welcome.dev_label 列表中弹出元素之前,列表中有元素
        while len(Welcome.dev_label) == 0:
            pass
        window1 = gtk.Window(Welcome.dev_label.pop())
        window2 = gtk.Window(Welcome.dev_label.pop())

        width = gtk.gdk.screen_get_default().get_width()
        height = gtk.gdk.screen_get_default().get_height()

        self.window1.resize(width/2,height)
        self.window2.resize(width/2,height)

        self.window2.move(self.window1.get_position()[0]+width/2, self.window1.get_position()[1])

        label = gtk.Label("Hello")
        self.window1.add(label)

        self.window1.connect("destroy" , lambda q : gtk.main_quit())
        self.window1.show_all()

        label = gtk.Label("World")
        self.window2.add(label)

        self.window2.connect("destroy",lambda q : gtk.main_quit())
        self.window2.show_all()

Welcome()
gtk.main()

修改后的程序确保在从 Welcome.dev_label 列表中弹出元素之前,已经将设备标签添加到该列表中,从而解决了 IndexError: pop from empty list 的问题。

在实际开发中,确保在操作列表之前检查其状态是一个良好的实践,能够防止许多潜在的错误。使用 try-except 块则是处理异常情况的一种有效方法,能够使程序更健壮并且具有容错能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1892495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Avalonia应用在基于Linux的国产操作deepin上运行

deepin系统介绍 deepin(原名Linux Deepin)致力于为全球用户提供美观易用&#xff0c;安全可靠的 Linux发行版。deepin项目于2008年发起&#xff0c;并在2009年发布了以 linux deepin为名称的第一个版本。2014年4月更名为 deepin&#xff0c;在中国常被称为“深度操作系统”。 …

一个项目学习Vue3---Vue计算属性

观察下面一段代码&#xff0c;学习Vue计算属性 <template><div><span>用户大于10岁的数量&#xff1a;{{ userVue.filter(user>user.age>10).length}}</span><span>用户大于10岁的数量2&#xff1a;{{ userAgeltTen}}</span><sp…

使用QStandardItemModel、QItemSelectionModel 绑定到tableView

1、使用QStandardItemModel、QItemSelectionModel 绑定到tableView&#xff0c;展示tableView的新增、插入&#xff0c;删除 、生成文档操作&#xff1b; 2、文本文件的读写 3、遍历QStandardItemModel 4、遍历 QItemSelectionModel 布局 .h #ifndef TABLEMODELVIEWEXAMPLE_H…

windows机器通过证书方式登录linux主机

1. 正常连接需要输入密码 ssh root1.1.1.1 2. 在Windows上生成SSH密钥对&#xff08;如果你还没有的话&#xff09;&#xff1a; ssh-keygen 3. scp将id_rsa.pub传输到对应的主机 4.对应机器上查看 5.从windows上免密登录

LiveNVR监控流媒体Onvif/RTSP用户手册-分屏展示:分组、轮播、四分屏、九分屏、十六分屏

LiveNVR监控流媒体Onvif/RTSP用户手册-分屏展示:分组、轮播、四分屏、九分屏、十六分屏 1、分屏展示1.1、选择通道1.2、多分屏1.3、分组1.4、轮播 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、分屏展示 1.1、选择通道 1.2、多分屏 支持 单屏、四分屏、九分屏、十六分屏 ![请添…

昇思25天学习打卡营第16天|ShuffleNet图像分类

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) ShuffleNet图像分类 当前案例不支持在GPU设备上静态图模式运行&#xff0c;其他模式运行皆支持。 ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和Mobile…

4D 生物打印智能生物墨水需要具备哪些关键特性?

4D 生物打印智能生物墨水需要具备哪些关键特性&#xff1f; 1. 可打印性 (Printability) MEB&#xff1a;生物墨水需要具有良好的流变学特性&#xff0c;例如高粘度、剪切稀化行为和触变性。打印参数&#xff08;如喷嘴直径、打印速度和层厚&#xff09;会影响打印性能。 喷…

Golang 依赖注入设计哲学|12.6K 的依赖注入库 wire

一、前言 线上项目往往依赖非常多的具备特定能力的资源&#xff0c;如&#xff1a;DB、MQ、各种中间件&#xff0c;以及随着项目业务的复杂化&#xff0c;单一项目内&#xff0c;业务模块也逐渐增多&#xff0c;如何高效、整洁管理各种资源十分重要。 本文从“术”层面&#…

游戏AI的创造思路-技术基础-自然语言处理

自然语言处理-可以对游戏AI特别是RPG类、语言类游戏进行“附魔”&#xff0c;开发出“随机应变”和你聊天的“女友”、“队友”或者是根据你定义的文本库来用接近自然语言的生成“语言”&#xff0c;推动游戏情景在受控范围内前进 目录 1. 自然语言处理定义 2. 发展历史 3. …

【配置网络和使用ssh服务】

文章目录 一、配置文件二、配置网络1.使用系统菜单配置网络2.通过网卡配置文件配置网络3.使用图形界面配置网络4.使用nmcli命令配置网络 三、配置远程控制服务1.配置sshd服务2.安全密钥验证3.远程传输命令 一、配置文件 跟网络有关的主要配置文件如下&#xff1a; /etc/host.c…

RS232、RS485、RS422、RS423、RS449的联系与区别

这些标准&#xff08;RS232、RS485、RS422、RS423、RS449&#xff09;都涉及将并行数据转换为串行数据进行传输&#xff1a; 数据转换过程&#xff1a; 在发送端&#xff0c;并行数据&#xff08;通常是字节或字&#xff09;被转换成串行比特流。 在接收端&#xff0c;串行比特…

CH552G使用的pwm出现的问题,及设置

输出pwm的频率周期很不准确 可能是因为没有外部晶振的稳定晶振周期有关。 使用的示波器出现操作失误 在使用小型示波器的过程中发现集成了信号发生器和示波器的连接端口是不同的。刚开始把示波器测试口错插入了信号发生器的接口&#xff0c;困扰好一会儿&#xff0c;幸好用一…

Zabbix 配置WEB监控

Zabbix WEB监控介绍 在Zabbix中配置Web监控&#xff0c;可以监控网站的可用性和响应时间。Zabbix提供了内置的Web监控功能&#xff0c;通过配置Web场景&#xff08;Web Scenario&#xff09;&#xff0c;可以监控HTTP/HTTPS协议下的Web服务。 通过Zabbix的WEB监控可以监控网站…

超声波气象站的工作原理

TH-CQX5超声波气象站中的超声波技术是其核心工作原理之一&#xff0c;以下是关于超声波气象站中超声波的详细解释&#xff1a;超声波是一种频率高于人耳能听到的声音频率范围的声波&#xff0c;通常指频率在20kHz以上的声波。超声波具有较短的波长和强的穿透能力&#xff0c;能…

vue安装+测试

1.下载node.js 在浏览器中打开nodejs官网https://nodejs.org/zh-cn/ &#xff0c;选择需要的版本 2.检查nodejs是否安装成功 打开cmd&#xff0c;输入命令 node -v PS C:\Users\neuer> node -v v20.15.03.安装cnpm 遇到npm ERR! code CERT_HAS_EXPIRED问题 清除npm缓存 n…

【TS】交叉类型 和 联合类型

文章目录 1. 交叉类型&#xff08;Intersection Types&#xff09;2. 联合类型&#xff08;Union Types&#xff09; 1. 交叉类型&#xff08;Intersection Types&#xff09; 交叉类型将多个类型合并为一个类型&#xff0c;这个新类型具有所有类型的特性。使用 & 符号来定…

妙手ERP接入Miravia,支持高效上货、批量订单处理

欧洲电子商务市场目前已经成为了中国跨境电商出口的“新蓝海”。放眼欧洲&#xff0c;西班牙电商市场规模并不算大&#xff0c;但却是增长率最高的市场之一&#xff0c;并且正在追赶其他电商市场。  据Statista的调查数据显示&#xff0c;2024年初西班牙的电商收入将达到355亿…

python自动化办公-往ppt插入图片

目录 思路 代码 代码效果 思路 1、导包 2、打开ppt 3、新增1张幻灯片&#xff0c;选择自己需要的版式 4、输入标题 5、设置好图片的位置和大小&#xff0c;插入准备好的图片 6、保存文件 代码 from pptx import Presentation from pptx.util import Inches # 打开pp…

【C语言入门】初识C语言:掌握编程的基石

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C语言入门 &#x1f4d2;1. 选择…

c->c++(二):class

本文主要探讨C类的相关知识。 构造和析构函数 构造函数(可多个)&#xff1a;对象产生时调用初始化class属性、分配class内部需要的动态内存 析构函数&#xff08;一个&#xff09;&#xff1a;对对象消亡时调用回收分配动态内存 C提供默认构造和析构,…