从另一个文件的不同函数访问变量

2024-09-28 18:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在mypythonlib目录中有一个文件myfunctions.py

from requests_html import HTMLSession
import requests

def champs_info(champname:str, tier_str:int):  
    url = f"https://auntm.ai/champions/{champname}/tier/{tier_str}"
    session = HTMLSession()
    r = session.get(url)
    r.html.render(sleep=1, keep_page=True, scrolldown=1)

    information = r.html.find("div.sc-hiSbYr.XqbgT")
    sig = r.html.find('div.sc-fbNXWD.iFMyOV')
    tier_access = information[0]
    tier = tier_access.text

我想通过另一个文件访问变量tiertest_myfunctions.py 但问题是,我还必须给函数champs_info提供参数,以便它能够相应地访问url

from mypythonlib import myfunctions
def test_champs_info():
    return myfunctions.champs_info("abomination",6).tier

但是在运行此代码时,我得到了一个错误-

./tests/test_myfunctions.py::test_champs_info Failed: [undefined]AttributeError: 'NoneType' object has no attribute 'tier'
def test_champs_info():
>       return myfunctions.champs_info("abomination",6).tier
E       AttributeError: 'NoneType' object has no attribute 'tier'

tests/test_myfunctions.py:3: AttributeError

有什么解决方案吗?为什么这段代码不能访问变量? 我写了myfunctions.champs_info("abomination",6).tier,希望它能从champs_info函数中获取tier变量,同时从myfunctions文件中为它提供所需的参数:(


Tags: 文件pytestimportinfourldefhtml
3条回答

通过1)返回函数中的值,2)在模块中使用全局变量,或3)定义类,可以访问函数中变量的值

如果只想访问函数的单个局部变量,则函数应返回该值。类定义的一个好处是,可以定义需要访问的任意多个变量

1。返回值

def champs_info(champname:str, tier_str:int):  
    ...
    tier = tier_access.text
    return tier

2。全球

tier = None
def champs_info(champname:str, tier_str:int):
    global tier
    ...
    tier = tier_access.text

访问全局层VARABLE

from mypythonlib import myfunctions

def test_champs_info():
    myfunctions.champs_info("abomination", 6)
    return myfunctions.tier

print(test_champs_info())

3。类别定义:

class Champ:
    def __init__(self):
        self.tier = None
    def champs_info(self, champname:str, tier_str:int):  
        ...
        self.tier = tier_access.text

test_functions.py可以用这种方式调用champs_info()

from mypythonlib import myfunctions

def test_champs_info():
    info = myfunctions.Champ()
    info.champs_info("abomination", 6)
    return info.tier
    
print(test_champs_info())

您只需从champs\u info()函数返回层即可

就这样,

myfunctions.py

from requests_html import HTMLSession
import requests

def champs_info(champname:str, tier_str:int):  
    url = f"https://auntm.ai/champions/{champname}/tier/{tier_str}"
    session = HTMLSession()
    r = session.get(url)
    r.html.render(sleep=1, keep_page=True, scrolldown=1)

    information = r.html.find("div.sc-hiSbYr.XqbgT")
    sig = r.html.find('div.sc-fbNXWD.iFMyOV')
    tier_access = information[0]
    tier = tier_access.text
    return tier               # <   Focus Here

测试函数.py

import myfunctions

print(temp.champs_info("americachavez", 6))

就这样。你完了

在myfunctions.champs_info()中添加一个返回层

在脚本测试中_myfunctions.py删除.tier

相关问题 更多 >