Wir schreiben einen Bot-Chat für VKontakte in Python mit Longpoll. Teil Zwei Doppelschleifen, Ausnahmen und andere Häresien

Grüße, Habr. Dieser Artikel ist eine Fortsetzung dieses Artikels. Ich empfehle dringend, dass Sie es vor dem Lesen lesen, wenn Sie dies noch nicht getan haben.

Heute wirst du lernen:

  1. Wie man mehr als eine Antwort bekommt, wenn auch Kollektivfarm
  2. So verbinden Sie einen Yandex-Übersetzer damit
  3. Und wie man dem Benutzer schreibt, dass er alles falsch gemacht hat

Api Yandex Übersetzer


Yandex Übersetzer hat eine gute API und wir werden es verwenden. Wir studieren die Dokumentation sorgfältig und ziehen in die Schlacht. Aber hier bringt uns Yandex ein Schwein.
Anforderungen für die Verwendung von Übersetzungsergebnissen
Gemäß der Lizenz zur Nutzung von Yandex.Translator muss der vom Yandex.Translator-Dienst übersetzte Text mit einem aktiven Link zur Seite translate.yandex.ru über oder unter dem Übersetzungsergebnis angegeben werden.

Anforderungen an das Textlayout
Der Text sollte angegeben werden:
in der Beschreibung des Softwareprodukts;
Hilfe für ein Softwareprodukt
auf der offiziellen Website des Softwareprodukts;
auf allen Seiten oder Bildschirmen, auf denen Servicedaten verwendet werden.
Nun, wir sind keine stolzen Menschen, wir werden überleben.

Wie funktioniert es?


Der Benutzer schreibt uns eine Nachricht, wir fragen, in welche Sprache er die Phrase übersetzen möchte. Nachdem wir den zu übersetzenden Text angefordert haben, senden wir das Ergebnis.

Technische Umsetzung


Holen Sie sich den API-Schlüssel
Wir benutzen diese Bibliothek

from yandex_translate import YandexTranslate #  translate = YandexTranslate('  ') 

Wir treten Longpoll, wie ich im 1. Teil beschrieben habe.

 if event.text == '': #     "" if event.from_user: vk.messages.send( #  user_id=event.user_id, message='  ?   .\n :  - ru,  - en' #C  "  ?   .\n :  - ru,  - en".       ) elif event.from_chat: vk.messages.send( # ,    chat_id=event.chat_id, message='  ?   .\n :  - ru,  - en' ) flag = 0 #     2-  for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #     trTo = event.text #    if event.from_user: vk.messages.send( #  user_id=event.user_id, message=' ,    ' ) elif event.from_chat: vk.messages.send( # ,    chat_id=event.chat_id, message=' ,    ' ) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #     trNormal = 1 #    try: #,     trFrom = translate.detect(event.text) #  trResult = translate.translate(event.text, trFrom + '-' + trTo) # except Exception as e: # -    trNormal = 0 #   print("Exception:", e) #   pass if trNormal == 1: #   if event.from_user: vk.messages.send( #  user_id=event.user_id, message='  «.» translate.yandex.ru\n' + str(trResult['text']) ) flag = 1 #  2-  break elif event.from_chat: vk.messages.send( # ,    chat_id=event.chat_id, message='  «.» translate.yandex.ru\n' + str(trResult['text']) ) flag = 1 break if trNormal == 0: #   if event.from_user: vk.messages.send( #  user_id=event.user_id, message='  ' #..    99%  - ,          ) flag = 1 #  2-  break elif event.from_chat: vk.messages.send( # ,    chat_id=event.chat_id, message='  ' ) flag = 1 break if flag == 1: #     2-  break 

Was sind Ausnahmen und was essen sie?


Ausnahmen - dies ist so etwas, dass im Fehlerfall läuft und uns davon erzählt. Verwenden Sie das Try-Except-Konstrukt, um Ausnahmen zu behandeln.

Versuchen wir, unseren Code ohne dieses Konstrukt zu implementieren.

-Übersetzung
-Welche Sprache? In zwei Buchstaben angeben.
Zum Beispiel: Russisch - ru, Englisch - en
-en
-Geben Sie die Phrase ein, die Sie übersetzen möchten
-Hi Habr
-Übersetzt vom Yandex.Translator-Dienst translate.yandex.ru
['Hi Habr']

Nun, es funktioniert und warum brauchen wir Ihre Ausnahmen?

Aber warum:
-Übersetzung
-Welche Sprache? In zwei Buchstaben angeben.
Zum Beispiel: Russisch - ru, Englisch - en
-abracadabra
-Geben Sie die Phrase ein, die Sie übersetzen möchten
-Hi Habr
...

In der Zwischenzeit in der Konsole:

 Traceback (most recent call last): File "C:\Py_trash\habrex.py", line 112, in <module> main() File "C:\Py_trash\habrex.py", line 78, in main trResult = translate.translate(event.text, trFrom + '-' + trTo) File "C:\Users\Hukuma\AppData\Local\Programs\Python\Python37-32\lib\site-packages\yandex_translate\__init__.py", line 150, in translate raise YandexTranslateException(status_code) yandex_translate.YandexTranslateException: None 

Und mit Ausnahmen:

-Übersetzung
-Welche Sprache? In zwei Buchstaben angeben.
Zum Beispiel: Russisch - ru, Englisch - en
-Abracadabra
-Geben Sie die Phrase ein, die Sie übersetzen möchten
-Hi Habr
- Falsch eingegebene Sprache

Ich werde mir den Versuch ansehen - außer das Konstrukt genauer:

 try: #sample code except Exception: #       

Ich werde ein Beispiel mit Wikipedia API geben:

  try: result = str(wikipedia.summary(event.text)) except wikipedia.exceptions.PageError: print('  ') except wikipedia.exceptions.DisambiguationError: print('') 

Wie Sie verstehen, kann es mehrere Ausnahmen geben.

Dazu verabschiede ich mich von dir. Alles Gute

Source: https://habr.com/ru/post/de428790/


All Articles