我们正在使用longpoll在python中为VKontakte编写机器人聊天。 第二部分 双循环,异常和其他异端

问候,哈勃。 本文是本文的续篇。 在阅读之前,强烈建议您阅读以前从未阅读过的内容。

今天您将学习:

  1. 如何获得一个以上的答案,尽管是集体农场
  2. 如何将Yandex转换器与此连接
  3. 以及如何向用户写信,他做错了一切

Api Yandex转换器


Yandex转换器具有良好的api,我们将使用它。 我们会仔细研究文档并投入使用。 但是,Yandex在这里给我们放了一只猪。
使用翻译结果的要求
根据使用Yandex.Translator的许可,必须在翻译结果的上方或下方指示由Yandex.Translator服务翻译的文本,并带有指向translate.yandex.ru页面的有效链接。

文字布局要求
文本应指定:
在软件产品的说明中;
帮助软件产品
在软件产品的官方网站上;
在使用服务数据的所有页面或屏幕上。
好吧,我们不是骄傲的人,我们将生存。

如何运作


用户给我们写了一条消息,我们询问他要将短语翻译成哪种语言。 之后,我们要求翻译文本并发送结果。

技术实施


获取 API密钥
我们使用这个图书馆

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

正如我在第一部分中所述,我们对longpoll进行踢球。

 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 

什么是例外,他们吃什么


例外-发生错误时,这种情况会运行并告诉我们。 要处理异常,请使用try -except构造。

让我们尝试在没有这种构造的情况下实现我们的代码。

-翻译
-什么语言? 用两个字母表示。
例如:俄语-ru,英语-en
-en
-输入您要翻译的词组
-哈勃
-由Yandex.Translator服务translation.yandex.ru翻译
['嗨哈伯']

好吧,它有效,为什么我们需要您的例外?

但是为什么:
-翻译
-什么语言? 用两个字母表示。
例如:俄语-ru,英语-en
-阿巴拉卡达布拉
-输入您要翻译的词组
-哈勃
...

同时,在控制台中:

 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 

并有例外:

-翻译
-什么语言? 用两个字母表示。
例如:俄语-ru,英语-en
-阿布拉卡达布拉
-输入您要翻译的词组
-哈勃
-输入的语言不正确

我将尝试一下-除了更详细的构造之外:

 try: #sample code except Exception: #       

我将以Wikipedia API为例:

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

如您所知,可能会有几个例外。

为此,我向你告别。 一切顺利

Source: https://habr.com/ru/post/zh-CN428790/


All Articles