Ich führe eine PyQt5 UI, die IP-Adressen durch REST APIs hinzufügt. Beim Senden von Operationen an meinen Worker Thread (führt einige for loops aus und führt einige Funktionen innerhalb dieser Schleifen aus), wird immer dann, wenn eine Ausnahme innerhalb des Codes ausgelöst wird, der genaue Fehler nicht von json.loads ausgegeben.PyQt5 Urllib löscht Ausgabe
Mein Hauptziel ist es, genau den err.read() des 4xx oder 5xx Fehler zu erhalten, um den Benutzer zu informieren, was genau passiert ist (die 4xx und 5xx Fehler werden ausgegeben, nur nicht die json.loads (err.read()).)
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))
In dieser try-Anweisung, mit der Protokollierung und Ausdrucken der Code nie macht es in den "if" Anweisung ... und es scheint json.loads (err.read) liest den Fehler eigentlich nicht.
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)
Ich verwende die folgenden in meinem Haupt-UI (nicht Worker-Thread) alle stdout die an den UI-Text auszusenden.
class EmittingStream(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
def flush(self):
pass
Jede Hilfe würde sehr geschätzt werden.
Danke,