【问题标题】:Return variables from one function to use in another with python [closed]从一个函数返回变量以在另一个函数中使用 python [关闭]
【发布时间】:2025-12-21 05:45:06
【问题描述】:

我不知道为什么这不起作用

from bs4 import *
import time
import pandas as pd
import pickle
import html5lib
from requests_html import HTMLSession

s = HTMLSession()
url = "https://cryptoli.st/lists/fixed-supply"


def get_data(url):
    r = s.get(url)
    soup = BeautifulSoup(r.text, 'html.parser')
    return soup
    
def get_next_page(soup):
    page = soup.find('ul', {'class': 'pager'})
    if not page.find('a', {'class': 'btn btn-default current disabled'}):
        url = 'https://cryptoli.st/lists/fixed-supply' + \
            str(page.find('li', {'class': 'paginate_button'}).find(
                'a')[{'class': 'btn btn-default next'}])
        return url
    else:
        return


get_data(url)
print(get_next_page(soup))

我见过其他脚本从一个函数返回变量以在另一个函数中使用,但这一直说“汤”没有定义。然后,如果我将汤设为全局变量,那么我会收到错误页面是 Nonetype 并且我不能调用它的 .find 属性。任何帮助将不胜感激。

【问题讨论】:

  • 您忘记将get_data 的结果分配给data
  • 你还没有定义一个名为data的变量。
  • 这不应该说soup没有定义,应该说data没有定义。
  • 这能回答你的问题吗? python return - "name not defined"
  • 关于为什么 page.find 返回此非类型错误的任何想法?或者如何解决这个问题?这是它给我的错误:if not page.find('a', {'class': 'btn btn-default current disabled'}): AttributeError: 'NoneType' object has no attribute 'find'

标签: python scope-chain


【解决方案1】:

print(get_next_page(data)) 的最后一行是运行函数 get_next_page 并传入参数 data。但是,data 从未定义,因此它传入 None。那么在get_next_page 内部,它分配soup = None。然后你在None 上运行其他所有东西。

在倒数第二行你需要做data = get_data(url),然后当你调用get_next_page(data))时,数据将等于你从第一个函数返回的soup

另外,您可能需要将 s = HTMLSession() 放在 get_url 函数中,或者像 url 一样将其传递给

【讨论】:

  • 对不起,我刚刚编辑了它。当我运行 get_next_page 函数时,soup 应该在那里传递。我更改了变量名
【解决方案2】:

这就是你正在做的。

def define_soup():
    soup = 'yummy'
    return soup 
def eat():
    return soup
define_soup() 
print(eat())

soup 确实在define_soup() 中定义,但它是该函数的本地函数。没有其他功能可以使用它。所以假设因为我们调用了define_soup(),所以我们可以在eat() 中使用它是错误的。相反,您可以将soup 设为全局或将define_soup() 的返回值存储在变量中。

使用全局

def define_soup():
    global soup
    soup = 'yummy'
    return soup 
def eat():
    return soup
define_soup() 
print(eat())

将 define_soup() 输出存储在 var 中

def define_soup():
    soup = 'yummy'
    return soup 
def eat(soup):
    return soup
sp = define_soup() 
print(eat(sp))

【讨论】:

  • 没问题,很乐意提供帮助。
【解决方案3】:

get_data(url) 函数返回一个变量,但不存储在任何内容中。所以你可以做

data = get_data(url) 打印(get_next_page(数据))

【讨论】: