Re: requests Fehlermeldung
Verfasst: Mittwoch 7. Januar 2015, 23:01
Hm... hätte es nicht einen NameError geben müssen, wenn der Name falsch war?
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
bei SSL und Protocol gab es den ja. aber bei ConnectionError hatte ich den nicht gesehen. Vllt hab ich den aber auch übersehen, weils nicht die letzte Fehlerausgabe war.Hyperion hat geschrieben:Hm... hätte es nicht einen NameError geben müssen, wenn der Name falsch war?
Code: Alles auswählen
def get_ticker_exchangepair(self,exchange,pairCode):
zahl = 0
i = 0
while zahl<1:
zahl+=1 # -> normalerweise Schleife nur einmal ausführen, außer es tritt fehler auf, dann zahl wieder auf 0 setzen
try:
if exchange =="TheRock":
#pairCode Form: BTCEUR
tickerInfo = rock.MarketData(pairCode)
elif exchange == "Boerse2":
#paircode Form: XXBTZEUR
tickerInfo = k.query_public('Ticker',{'pair': pairCode})
else:
print("Ungültiger Exchange Name bei get_ticker_exchangepair übergeben!")
history("Ungültiger Exchange Name bei get_ticker_exchangepair übergeben!")
return None
except requests.exceptions.ConnectionError:
print("Keine Internetverbindung...bei {0} Tickerpair Abfrage:".format(exchange), sys.exc_info()[0])
history("Keine Internetverbindung...bei {0} Tickerpair Abfrage:".format(exchange), sys.exc_info()[0])
i+=1
if i<=5:
print("...in 10 sekunden nochmal versuchen...")
history("...in 10 sekunden nochmal versuchen...")
zahl =0
sleep(10)
continue
if i>5:
print("Fehler zu oft hintereinander aufgetreten, daher Abbruch des Bots")
history("Fehler zu oft hintereinander aufgetreten, daher Abbruch des Bots")
return None
except requests.exceptions.SSLError as err:
print("SSL Fehler bei {1}Abfrage : {0} Tickerpair ... ... tritt normalerweise nur selten auf, deswegen einfach in 5 sekunden nochmal probieren".format(err,exchange))
history("SSL Fehler bei {1}Abfrage : {0} Tickerpair ... ... tritt normalerweise nur selten auf, deswegen einfach in 5 sekunden nochmal probieren".format(err,exchange))
sleep(5)
i+=1
zahl=0
continue
except:
print("Unbekannter Fehler bei {0} Tickerpair Abfrage :".format(exchange), sys.exc_info()[0])
history("Unbekannter Fehler bei {0} Tickerpair Abfrage :".format(exchange), sys.exc_info()[0])
i+=1
if i<=5:
print("...in 5 sekunden nochmal versuchen...")
history("...in 5 sekunden nochmal versuchen...")
sleep(5)
zahl=0
continue
if i>5:
print("Fehler zu oft hintereinander aufgetreten, daher Abbruch des Bots")
history("Fehler zu oft hintereinander aufgetreten, daher Abbruch des Bots")
return None
return(tickerInfo)Ja, eig können diese Fehler nicht von mir verursacht sein, weil sie schließlich nur grob alle 2 stunden einmal auftreten und das eben an Stellen die sonst keinen Fehler produzieren.Sirius3 hat geschrieben:@Serpens66: TypeError und ValueError sollten eigentlich bei einer vernünftigen API nicht auftreten. Das sind dann wahrscheinlich nur eines vorhergehenden nicht richtig abgefangenen Fehlers.
Code: Alles auswählen
{'error': [], 'result': {'XXBTZEUR': {'bids': [['229.00000', '2.353', 1421076333], ['228.63700', '0.002', 1421076120]],
'asks': [['229.01000', '0.500', 1421076333], ['229.04000', '39.979', 1421076303]]}}}Code: Alles auswählen
bestask_price_u_volume_boerse2 = FullOrderBook_boerse2["result"]["XXBTZEUR"]["asks"][0]
bestbid_price_u_volume_boerse2 = FullOrderBook_boerse2["result"]["XXBTZEUR"]["bids"][0]logging hatte ich mir angeschaut, bevor ich mir selbst history zusammengebastelt habe. Ich bin aber mit den vielen Funktionen von logging nicht zurechtgekommen und wollte zu dem Zeitpunkt sowieso personalisierte Berichte in .txt dateien schreiben wo ich dann die Fehlermeldungen eig auch mit aufnehmen wollte, weshalb ich logging dann verworfen habe.Sirius3 hat geschrieben: Wenn man Meldungen an verschiedenen Stellen ausgeben will, oder überhaupt nur Meldungen ein bißchen standardisiert verarbeiten will, bietet sich das logging-Modul an, dann braucht man auch nicht alle Meldungen doppelt zu schreiben!
Code: Alles auswählen
logging.basicConfig(filename='testlog.log',level=logging.DEBUG,format='%(asctime)s %(message)s')Angenommen ich bräuchte diese Variablen hier, was wäre dann ein sinnvoller Name? Mir ist keiner eingefallen, außer vllt "counter", aber da bin ich immer etwas vorsichtig, weil es sowas möglicherweise ja schon python intern gibt und ich keine Namen doppelt verwenden will.Sirius3 hat geschrieben: Weder zahl noch i sind sinnvolle Variablennamen und zahl ist nicht mal eine sinnvolle Variable, schau doch mal genau nach, für was Du die überhaupt brauchst!
While-Schleifen, die zählen, ersetzt man praktischerweise durch eine for-Schleife. if und else solltest Du Dir dirngend auch nochmal anschauen.
... auf das erneute raisen des Fehlers nach 5 Fehlversuchen bin ich nicht gekommen... ja das wäre tatsächlich eine sinnvolle Möglichkeit, auch um den Bot dann eben sofort abzubrechen....Sirius3 hat geschrieben:Die von Dir verlinkte Seite ist selten eine Quelle guter Programmierung. Nackte except sollte man von den von Dir selbst schon genannten Gründen auch nie machen. Wenn Du dann tatsächlich nach 5mal den Fehler weiter gibst, dann mach das, indem Du in erneut raiset und nicht indem Du einen None-Wert zurückgibst, damit weiß der Aufrufer nämlich nicht, ob da jetzt alles gute gelaufen ist oder nicht.
Nur weil ich etwas weiß, heißt das nicht gleich, dass ich auch auf die Lösung komme, siehe oben mit dem raiseSirius3 hat geschrieben: Zu 5.: Du weißt ja jetzt wie man Funktionen per Variable weitergibt, jetzt kannst Du Dein Wissen endlich mal auf ein neues Problem anwenden.
Weil einfach einfach einfach ist.Serpens66 hat geschrieben:(also nach ein paar minuten würde mir sehr sicher eine Lösung einfallen, aber warum kompliziert, wenn es auch einfach geht?)
Code: Alles auswählen
def get_ticker_exchangepair(self, exchange, pair_code):
for error_count in range(5):
try:
if exchange =="TheRock":
#pairCode Form: BTCEUR
return rock.MarketData(pair_code)
elif exchange == "Boerse2":
#paircode Form: XXBTZEUR
return k.query_public('Ticker',{'pair': pair_code})
else:
raise AssertionError("Ungültiger Exchange Name bei get_ticker_exchangepair übergeben!")
except requests.exceptions.ConnectionError as err:
logging.exception("Keine Internetverbindung...bei {0} Tickerpair Abfrage:".format(exchange))
last_error = err
except requests.exceptions.SSLError as err:
logging.exception("SSL Fehler bei {1}Abfrage : {0} Tickerpair ... ... tritt normalerweise nur selten auf, deswegen einfach in 5 sekunden nochmal probieren".format(err,exchange))
last_error = err
except Exception as err:
logging.exception("Unbekannter Fehler bei {0} Tickerpair Abfrage :".format(exchange))
last_error = err
sleep(10)
logging.exception("Fehler zu oft hintereinander aufgetreten, daher Abbruch des Bots")
raise last_errorCode: Alles auswählen
def GetBalance(self, currency):
try:
url = 'https://www.therock.com/api/get_balance'
values = {
'username' : self.username,
'password' : self.password,
'api_key' : self.key,
'type_of_currency' : currency
}
Balance = requests.post('https://www.therock.com/api/get_balance', data=values).json()
return Balance
except Exception as err:
raise err