首页 > 解决方案 > 不返回python函数中的内容

问题描述

我试图编写一个代码来每天监控网站,但我在一个函数的返回中被困住了。当我执行这个脚本时,我得到了错误:

NameError                                 Traceback (most recent call last)
<ipython-input-1-071caa90924c> in <module>
     62 salva_arquivo(url)
     63 checa_existe_anterior(url)
---> 64 pesquisa_diferenca(conteudo_old,conteudo_new)
     65 
     66 

NameError: name 'conteudo_old' is not defined

但是当我尝试在函数内打印(conteudo_old)或(conteudo_new)时,它们确实存在并且有内容。但是,如果我最后执行所有调用函数的脚本,就会出现这个错误。有人知道吗?tks

import requests, urllib3, httplib2
import os
from datetime import *
import difflib
import string
import csv

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

url = 'https://www.example.com'

def salva_arquivo(url):
    ## Primeiro  - Cria o nome
    nomesite = "".join([i.replace(i, "") if i not in string.ascii_letters else i for i in url])
    dataHoje = date.today().strftime('%d-%m-%Y')
    nomesite_new = f"{nomesite}_{dataHoje}.html"
    response = requests.get(url)
    conteudo_new = str(response.content)
    ## Segundo - Cria e Grava o Arquivo
    with open (nomesite_new, encoding='utf-8', mode = 'w+') as nomesite_new:
         nomesite_new.write(conteudo_new)
    return conteudo_new


def checa_existe_anterior (url):
    ## Cria o nome do site de ontem
    dataOntem = (date.today() - timedelta(days=1)).strftime('%d-%m-%Y')
    nomesite = "".join([i.replace(i, "") if i not in string.ascii_letters else i for i in url])
    nomesite_old = f"{nomesite}_{dataOntem}.html"
    ## Procura se existe o arquivo no diretório    
    for files in os.listdir(): 
        if str(files) == str(nomesite_old):
            with open (nomesite_old, mode = 'r') as nomesite:
                conteudo_old = nomesite.read()
        elif conteudo_old == None:
            print('nao encontrei')
    return conteudo_old



def pesquisa_diferenca(conteudo_old, conteudo_new):
    s = difflib.SequenceMatcher(None, conteudo_old, conteudo_new)
    for block in s.get_matching_blocks():
        print(block)
        pass

salva_arquivo(url)
checa_existe_anterior(url)
pesquisa_diferenca(conteudo_old,conteudo_new)

标签: python

解决方案


您需要将函数的返回值分配给变量,以便可以使用它们来调用下一个函数。

conteudo_new = salva_arquivo(url)
conteudo_old = checa_existe_anterior(url)
pesquisa_diferenca(conteudo_old,conteudo_new)

推荐阅读