我正在运行一个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
任何协助都将不胜感激。你知道吗
谢谢你
在进一步测试后找到了答案!json错误是以字节而不是字符串的形式接收错误。我发现在我的代码中我只是传递ValueError…没有正确的错误处理。你知道吗
我补充说:
这让我看到确切的错误是一个类型错误。你知道吗
发现我的json错误实际上是作为字节而不是字符串传递的。将.decode()添加到我的代码中,现在它输出准确的错误。你知道吗
相关问题 更多 >
编程相关推荐