Python 中的变量在对象被删除后被删除?

问题描述 投票:0回答:0

我是 Python 新手。也许比我更有经验的人可以帮助我。

我正在尝试使用 API 调用从 Okta 中删除用户。为了从 Okta 中删除用户,您需要执行两次相同的 DELETE 请求。第一个禁用帐户,第二个将其删除。

我有两个功能:一个是使用电子邮件地址检索用户 ID,然后是使用 ID 删除用户的功能。

如果我去 Postman 并运行 API 调用两次,它就可以正常工作。第一个禁用帐户,第二个删除它。

我正在尝试通过这样做在 Python 中完成它:

okta_user = okta.user_search(login)
okta_id = okta_user[0]["id"]
for _ in range(2):
    okta.user_delete(okta_id)

但我得到这样的回应:

DEBUG: https://fakeoktaaddress.com:443 "DELETE //api/v1/users/00u7ngjk6u2fkJR7o1d7 HTTP/1.1" 204 0
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/requests/models.py", line 971, in json
    return complexjson.loads(self.text, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./offboard.py", line 51, in <module>
    okta.user_delete(okta_id)
  File "/calls/calls.py", line 151, in user_delete
    logging.info(response.json())
                 ^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/requests/models.py", line 975, in json
    raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

如您所见,第一次调用运行完美并返回 204,但第二次似乎失败了。

我的理论是,在第二次运行中,python 以某种方式尝试通过再次运行这些函数中的一个或两个来再次获取 okta_id 的值:

okta_user = okta.user_search(login)
okta_id = okta_user[0]["id"]

如果这确实发生了,那么

okta_user = okta.user_search(login)
将失败,因为您无法通过电子邮件搜索已停用的用户。

难道我检索并存储在变量中的信息在首先创建它的调用中的对象被删除后被删除了吗?我做错了什么,我该如何解决这个问题?

谢谢!

尝试使用元组而不是常规变量。还尝试了全局变量而不是可重用变量。

python python-3.x api okta okta-api
© www.soinside.com 2019 - 2024. All rights reserved.