我试图从AWS lambda(python)中的特定命名空间获取pod列表。
它给出了正确的和预期的pod列表。但是当我传递错误的命名空间时,它不会跳过try块,也不会捕获except块以返回正确的响应。有什么原因吗?
import json
from kubernetes.client.rest import ApiException
def get_pods(namespace: str, apiCoreclient: object):
response_output = {}
response_output["statusCode"] = 200
retList = []
items = apiCoreclient.list_namespaced_pod(namespace).items
for item in items:
try:
retList.append(item.metadata.name)
response_output['Pods'] = json.dumps({"Pods": retList})
except ApiException as e:
response_output["error"] = e.reason
response_output["statusCode"] = e.status
response_output["isBase64Encoded"] = "False"
return json.dumps(response_output)
1条答案
按热度按时间x0fgdtte1#
这个问题似乎与
try/except
错误处理的位置有关。在当前的代码中,您已经将try/except
放在了遍历每一项的循环中。这意味着它只在您将pod名称添加到retList
或在response_output
中设置'Pods'字段时捕获错误。但是当您尝试使用
apiCoreclient.list_namespaced_pod(namespace)
列出名称空间中的pod时,可能会出现您预期的错误-ApiException
。这一行在try/except
块之外,所以如果ApiException
发生在那里,错误处理不会捕捉到它。要解决这个问题,您应该移动
try/except
块以包含apiCoreclient.list_namespaced_pod(namespace)
行。下面是函数的一个调整版本来说明这一点:在这个改进的版本中,如果在尝试列出命名空间中的pod时出现
ApiException
,它将被捕获并创建正确的错误响应。