PyQt5 Urllib删除输出

2024-06-17 12:55:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个pyqt5ui,它通过restapi添加IP地址。当将操作发送到我的工作线程时(运行一些for循环,并在这些循环中运行一些函数),每当我在代码中抛出异常时…它将不会打印来自的确切错误json.loads文件. 你知道吗

我的主要目标是读取错误()的4xx或5xx错误,所以要告诉用户到底发生了什么(4xx和5xx错误将输出,而不是json.loads文件(读取错误()))

def patch_object_group (f):
    self.api_path = "/api/objects/networkobjectgroups/EXT-SFTPALLOWED/"
    self.req = urllib.request.Request(str(server) + self.api_path, json.dumps(self.patch_data_group).encode('utf-8'), headers, method="PATCH") #Default Method is Post
    self.base64string = base64.encodestring(('%s:%s' % (username,password)).encode()).decode().replace('\n', '')
    self.req.add_header("Authorization", "Basic %s" % self.base64string)
    try:
        f = urllib.request.urlopen(self.req)#Had to add .request between the url for python 3.
        self.status_code = f.getcode()
        # print("Status code is {}.".format(self.status_code))
        if self.status_code == 204:
            print ("The following object was added to the group successfully: {}".format(self.patch_data_group["members.add"][0]["value"]))
            jsonoutputlist.append(self.patch_data_group)
    except urllib.error.HTTPError as err: #Python3 requires urllib.error.HTTPError to work.
        print ("Error received from server: {}.  HTTP Status code: {}".format(err.reason, err.code))

在这个try语句中,通过日志记录和打印输出,代码永远不会进入到“if”语句中…它出现了json.loads文件(读取错误)实际上没有读取错误。你知道吗

try:
    json_error = json.loads(err.read)
    if json_error: #Doesn't make it into the if statement when error is received.
        print (json.dumps(json_error,sort_keys=True,indent=4, separators=(',', ': ')))
except ValueError:
    pass
finally:
    if f:  f.close()
    return (f) 

我在我的主UI(不是工作线程)中使用以下命令将所有标准输出发送到UI文本框。你知道吗

class EmittingStream(QtCore.QObject):
    textWritten = QtCore.pyqtSignal(str)
    def write(self, text):
        self.textWritten.emit(str(text))
    def flush(self):
        pass

任何协助都将不胜感激。你知道吗

谢谢你


Tags: 文件selfapijsonifdef错误group
1条回答
网友
1楼 · 发布于 2024-06-17 12:55:20

在进一步测试后找到了答案!json错误是以字节而不是字符串的形式接收错误。我发现在我的代码中我只是传递ValueError…没有正确的错误处理。你知道吗

except ValueError:
    pass

我补充说:

except (TypeError, ValueError) as e:
    print("Error: {}".format(e))
    pass

这让我看到确切的错误是一个类型错误。你知道吗

发现我的json错误实际上是作为字节而不是字符串传递的。将.decode()添加到我的代码中,现在它输出准确的错误。你知道吗

json_error = json.loads(err.read().decode())

相关问题 更多 >