нетипичный объект не имеет атрибута «текст» только из linux

#python #python-3.x

#python #python-3.x

Вопрос:

я использую phyton 3.6.9 из debian, и у меня проблема с моим кодом.

Что делает мой код?Мой код извлекает новости из URL-адреса xml (используя bs4 и urllib) и публикует их на канале telegram с использованием библиотеки telepot. Проверка выполняется в день публикации.

В чем моя проблема?Мой код отлично работает из Windows. Из Linux он выполняет очистку правильно, но когда я дошел до последних новостей на сайте, он вернул эту ошибку:

 Traceback (most recent call last):
  File "bot.py", line 32, in <module>
    get_data()
  File "bot.py", line 27, in get_data
    prev_date_time = datetime.datetime.strptime(news_list[0].pubDate.text, '%a, %d %b %Y %H:%M:%S %z')
AttributeError: 'NoneType' object has no attribute 'text'
  

Я уже пробовал некоторые решения, представленные здесь, в Stackoverflow!

Это мой код:

 from bs4 import BeautifulSoup as soup
from urllib.request import urlopen
import requests
import time
import datetime
import telepot

BOT_TOKEN = " ... "
bot = telepot.Bot(BOT_TOKEN)

def get_data():
    global prev_date_time
    site = 'http://www.televideo.rai.it/televideo/pub/rss102.xml'
    op = urlopen(site)
    rd = op.read()
    op.close()
    sp_page = soup(rd, 'html.parser')
    news_list = sp_page.find_all('item')
    for news in news_list:

        if prev_date_time and prev_date_time >= datetime.datetime.strptime(news.pubDate.text, '%a, %d %b %Y %H:%M:%S %z'):
            break
        print(news.title.text)
        bot.sendMessage('-1001335964270', news.title.text)

    if news_list:
        prev_date_time = datetime.datetime.strptime(news_list[0].pubDate.text, '%a, %d %b %Y %H:%M:%S %z')
prev_date_time = None

while True:
    get_data()
    time.sleep(5)
  

Ответ №1:

Здесь элемента pubdate нет pubDate , и python чувствителен к регистру, поэтому вам нужно использовать точное имя:

 prev_date_time = datetime.datetime.strptime(news_list[0].pubdate.text, '%a, %d %b %Y %H:%M:%S %z')