python – 当list为空时,List comprehension抛出异常

python – 当list为空时,List comprehension抛出异常,第1张

概述我有一个函数可以过滤列表项目,如果它们的日期是过去的(小于当前日期). meetings = []def clean_old(): meetings = [meeting for meeting in meetings if time.mktime(meeting) >= time.localtime()] 当列表为空时,此代码崩溃. 为什么会崩溃?它说要在会议上开会,如果会议是空的,那 我有一个函数可以过滤列表项目,如果它们的日期是过去的(小于当前日期).

meetings = []def clean_old():    meetings = [meeting for meeting in meetings if time.mktime(meeting) >= time.localtime()]

当列表为空时,此代码崩溃.

为什么会崩溃?它说要在会议上开会,如果会议是空的,那么一切都应该没问题.

我该如何修复它以及该事件的解释是什么?

解决方法 我假设你看到了这个例外:

UnboundLocalError: local variable 'meetings' referenced before assignment

您在这里遇到的内容与列表推导实际上没有任何关系.发生此错误的原因是您最初在函数外部定义了会议,但是您尝试在函数内部为其分配新值.

当Python看到变量在函数内部被赋值时,它会将其视为特定于该函数的新变量.这可以防止函数访问具有相同名称的函数外部的任何变量.

在内部,Python正在做类似这样的事情:

meetings_outsIDe = []def clean_old():    meetings_insIDe = [meeting for meeting in meetings_insIDe if time.mktime(meeting) >= time.localtime()]

您可以理解为什么会失败:meetings_insIDe是根据自身定义的.当Python尝试查找meetings_insIDe的值以开始迭代其内容时,它会失败,因为尚未为其分配值.

如何处理这取决于您使用的是哪个版本的Python,并且定义了会议的初始值.

在Python 3中,您只需将非本地会议添加到功能的顶部即可.这将告诉它您指的是名为meetings的现有变量,而不是创建另一个变量.

但是,您可能正在使用Python 2,它没有nonlocal关键字.它确实有global关键字,它执行相同的 *** 作,但仅限于在模块的顶层定义会议:在任何其他函数或类之外.

例如,如果您的文件中没有其他内容,则可以在Python 2中使用:

进口时间

meetings = []def clean_old():    global meetings    meetings = [meeting for meeting in meetings if time.mktime(meeting) >= time.localtime()]clean_old()print meetings
[]

但是这不会,因为会议是在函数内部定义的:

import timedef main():    meetings = []    def clean_old():        global meetings        meetings = [meeting for meeting in meetings if time.mktime(meeting) >= time.localtime()]    clean_old()    print meetingsmain()
nameError: global name 'meetings' is not defined

你需要解决这个问题.最简单的方法是将赋值修改为:

meetings[:] = [meeting for meeting in meetings if time.mktime(meeting) >= time.localtime()]

这告诉Python您正在替换会议中的所有值,但不会创建新的列表对象. (:语法称为“切片”,部分描述为in the Python tutorial.)

总结

以上是内存溢出为你收集整理的python – 当list为空时,List comprehension抛出异常全部内容,希望文章能够帮你解决python – 当list为空时,List comprehension抛出异常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存