【问题标题】:Python Ignore exception and continue with the following item in a listPython忽略异常并继续列表中的以下项目
【发布时间】:2021-08-19 05:38:12
【问题描述】:

大家早上/下午/晚上好! 我正在尝试编写一个具有航空功能的不和谐机器人。其中之一是一个命令,它通过确定机场的气象报告来回答用户。我正在使用 API 来实现这一点。

假设我有一个用户输入的机场列表:

airports = ["A","B","C"]

我有一个函数可以拆分列表并根据 API 检索信息。效果很好。

麻烦来了。假设列出的任何机场都不存在/拼写错误/等等。 我怎样才能让代码忽略它并与其他机场保持一致?

这是我正在处理的代码:

for i in aeropuertos:
  finalizado = MetarBot.metarbot.Taf(i)
  await ctx.send(finalizado)
  time.sleep(0.5)

它处理机场“A”,一切都很好。输出数据。当谈到机场“B”时,它会停在那里。有什么方法可以忽略(或弹出“检查您的拼写!”)并继续列表中的下一个?

已尝试使用 try and except,但没有奏效。还尝试了 contextlib.suppress

EDIT1:API 文档:https://avwx.docs.apiary.io/#introduction/authentication

【问题讨论】:

  • 我的感觉是它可能不会因为异常而停止,但可能是卡住了。具体停在哪条线?
  • 你能提供你正在使用的 api 的文档吗? API 不应将此视为错误,而是应返回某种“未找到项目”响应。检查它是否有超时参数。
  • @luizbarcelos 嗨!它是这样工作的:您输入一个 4 个字母的代码。然后它转到 API 并检索字典。从那里我提取一个特定的键[“raw”]。当代码无法检索到那个未知/拼写错误的机场的密钥时,代码就会停止。我刚刚编辑了添加 API 参考的帖子,谢谢您的回答!
  • @DvirH 刚刚用 API 文档编辑了帖子,谢谢!

标签: python exception try-catch


【解决方案1】:

我无法弄清楚如何做到这一点。我有点解决了这个问题。我对如何解决这个问题有一些想法。例如,在开始 API 请求之前有一个文本文件检查名称是否正确。

但我所做的是找出错误的机场代码并给出答案。

try:
    a = 0
    for i in aeropuertos:
    finalizado = MetarBot.metarbot.Taf(i)
    await ctx.send(finalizado)
    time.sleep(0.5)
    a += 1
except:
      error = aeropuertos[a]
      await ctx.send(f"Error. {error.upper()} inválido/no se encuentra en la base de datos.") 

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 2011-12-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多