python - For 循环语句不读取 if 语句以继续下一次迭代
问题描述
我的代码如下所示:
for item in items:
if item.data["position"] == '5':
item.delete()
continue
elif item.data["lang"] == 'SPA':
message_body = my_message_spa[item.data["position"]]
else:
message_body = my_message_eng[item.data["position"]] # English (default)
message = client.messages.create(
item.data["phone_number"],
body=message_body,
from_="xxxx"
)
# increment the position for this user
item.data["position"]+=1
此代码旨在向用户发送消息。项目是包含用户电话号码、日期、语言和位置的字典列表。位置是指它们在消息序列中的位置。我想检查一个用户的位置,如果他们已经收到5
消息,那么应该从列表中删除它并继续到下一个用户。如果用户的位置是,<5
那么它应该进入else if
语句并根据满足的条件发送消息。
字典列表具有以下结构:
{'phone_number': '+1234567890', 'position': 5, 'lang': 'ENG', 'Date': '2018-08-17 00:03:46'}
{'phone_number': '+0987654321', 'position': 2, 'lang': 'ENG', 'Date': '2018-12-18 07:10:47'}
代码以前运行良好,我添加/测试的新部分是 if 语句检查位置,但似乎 if 语句根本没有被调用,而是直接进入下面的elif
检查'lang'
并发送消息并增加位置为用户。在我的情况下,用户的位置会增加到6
.
解决方案
您似乎错误地比较了该值。您正在尝试将字符串“5”与整数 5 进行比较。
if item.data["position"] == '5':
注意 5 左右的引号。
例如:
print(1 == "1")
print(1 == 1)
第一个返回 False,第二个返回 True。
在迭代列表时,您也不应该从列表之类的东西中删除项目。而是尝试创建副本或使用列表推导。
推荐阅读
- powershell - A Get-ChildItem 内的 Get-ChildItem
- ruby-on-rails - 未从浏览器缓存加载 application.css 文件
- vb.net - OracleDataAdapter,没有命令超时和填充方法挂起
- pandas - 转置后如何调用列?
- python - 无法关闭使用 pdfplumber open() 打开的 pdf 文件
- flutter - 为什么 Dart 中的 const Widget 不相同?
- arrays - 如何将循环和数组与小部件一起使用?扑
- azure-devops - 内部服务器错误 Azure Dev Ops Server 2019
- continuous-integration - 使用 bitbucket 和远程服务器(如数字海洋水滴)自动部署的最佳方法是使用 git 挂钩或管道?
- python - 使用 Python 3 从 post 请求中获取数据