首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:“NoneType”对象不是可调用的telebot

TypeError:“NoneType”对象不是可调用的telebot
EN

Stack Overflow用户
提问于 2022-10-17 12:27:05
回答 1查看 66关注 0票数 -1

我是皮顿的新手。我收到了电报机器人的手杖。如果我只发送文件,一切正常,但是当我开始输入数据并生成pdf文件时,在bot中发送文件之后,我的代码就会出现错误:

代码语言:javascript
复制
2022-10-17 12:19:54,164 (__init__.py:878 MainThread) ERROR - TeleBot: "Infinity polling exception: 'NoneType' object is not callable"
ERROR:TeleBot:Infinity polling exception: 'NoneType' object is not callable
2022-10-17 12:19:54,167 (__init__.py:880 MainThread) ERROR - TeleBot: "Exception traceback:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 875, in infinity_polling
    logger_level=logger_level, allowed_updates=allowed_updates, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 947, in polling
    logger_level=logger_level, allowed_updates=allowed_updates)
  File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 1021, in __threaded_polling
    raise e
  File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 977, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "/usr/local/lib/python3.7/dist-packages/telebot/util.py", line 154, in raise_exceptions
    raise self.exception_info
  File "/usr/local/lib/python3.7/dist-packages/telebot/util.py", line 98, in run
    task(*args, **kwargs)
TypeError: 'NoneType' object is not callable
"
ERROR:TeleBot:Exception traceback:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 875, in infinity_polling
    logger_level=logger_level, allowed_updates=allowed_updates, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 947, in polling
    logger_level=logger_level, allowed_updates=allowed_updates)
  File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 1021, in __threaded_polling
    raise e
  File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 977, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "/usr/local/lib/python3.7/dist-packages/telebot/util.py", line 154, in raise_exceptions
    raise self.exception_info
  File "/usr/local/lib/python3.7/dist-packages/telebot/util.py", line 98, in run
    task(*args, **kwargs)
TypeError: 'NoneType' object is not callable
代码语言:javascript
复制
import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
import os
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from datetime import date
import email, smtplib, ssl
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

TELEGRAM_TOKEN = 'bot token'

bot = telebot.TeleBot(TELEGRAM_TOKEN)
current_date = date.today()
print(current_date)

@bot.message_handler(commands=["start"])
def start(m, res=False):
    bot.send_message(m.chat.id, 'Я на связи. Как тебя зовут? )')
@bot.message_handler(content_types=['text'])
def get_name(message):
  bot.send_message(message.from_user.id, "Введи серию и номер паспорта?");
  global name
  name = message.text
  print(name)
  bot.register_next_step_handler(message, get_passport_serial);
def get_passport_serial(message):
  bot.send_message(message.from_user.id, "Введи кем и когда выдан паспорт");
  global number
  number = message.text
  print(name)
  print(number)
  bot.register_next_step_handler(message, get_passport_info);
def get_passport_info(message):
  bot.send_message(message.from_user.id, "Введи адрес регистрации");
  global info
  info = message.text
  print(name, number, info)
  bot.register_next_step_handler(message, get_passport_adress);
def get_passport_adress(message):
  bot.send_message(message.from_user.id, "Жди");
  global adress
  adress = message.text
  print(name, number, info, adress)
  bot.register_next_step_handler(message, send_PDF(message, name, number, info, adress));
def send_PDF(message, name, number, info, adress):
  checkSend = False
  print("отправлено")
  while checkSend == False:
    try:
      f = open("original" + str(message.from_user.id) + ".pdf","rb")
      bot.send_document(message.chat.id,f)
      checkSend = True
      if os.path.isfile("original" + str(message.from_user.id) + ".pdf"): 
        os.remove("original" + str(message.from_user.id) + ".pdf") 
        print("success") 
      else: print("File doesn't exists!")


    except FileNotFoundError:
      print('write')
      pdfmetrics.registerFont(TTFont('DejaVuSerif','DejaVuSerif.ttf', 'UTF-8'))
      packet = io.BytesIO()
      can = canvas.Canvas(packet, pagesize=letter)
      can.setFont('DejaVuSerif', 10)
      can.drawString(150, 785, name)
      can.drawString(130, 755, number)
      can.drawString(250, 755, info)
      can.drawString(210, 727, adress)
      can.drawString(130, 200, str(current_date))
      can.save()

      #move to the beginning of the StringIO buffer
      packet.seek(0)

      # create a new PDF with Reportlab
      new_pdf = PdfFileReader(packet)
      # read your existing PDF
      existing_pdf = PdfFileReader(open("destination.pdf", "rb"))
      output = PdfFileWriter()
      # add the "watermark" (which is the new pdf) on the existing page
      page = existing_pdf.getPage(0)
      page.mergePage(new_pdf.getPage(0))
      output.addPage(page)
      # finally, write "output" to a real file
      outputStream = open("original" + str(message.from_user.id) + ".pdf", "wb")
      output.write(outputStream)
      outputStream.close()
@bot.message_handler(content_types=['document'])
def sender_email(message):
  print("file accepted")
bot.infinity_polling()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-25 12:08:55

这样啊,原来是这么回事。如果有人感兴趣的问题是在bot.register_next_step_handler。如果函数是这样的,它就不能提供参数,而不是这样:

代码语言:javascript
复制
bot.register_next_step_handler(message, send_PDF(message, name, number, info, adress))

我做了这个:

代码语言:javascript
复制
send_PDF(message, name, number, info, adress)

现在一切都很好。谢谢我自己)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74097264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档