python - 不返回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)
解决方案
您需要将函数的返回值分配给变量,以便可以使用它们来调用下一个函数。
conteudo_new = salva_arquivo(url)
conteudo_old = checa_existe_anterior(url)
pesquisa_diferenca(conteudo_old,conteudo_new)
推荐阅读
- mongodb - 如何从mongodb中提取数据(查找和删除)
- typescript - 如何使用 jest 和测试库来测试 typescript 应用程序?
- algorithm - 是否有任何算法可以在 O(log n) 时间内找到最大堆中的第 k 个最小元素?
- c - C:查找整数的 n 次幂(使用函数)
- solr - Solr 任意范围方面在没有开始参数的情况下不起作用
- java - Java中字符串以零结尾时如何解决NumberFormatException?
- ios - 自定义 func 中定义的表头
- ios - Firestore Swift 5:验证文档用户名数据是否存在
- python - Python3:将 csv 直接写入 zipfile 会产生 TypeError
- html - HTML 中的条件图像