从另一个文件的不同函数访问变量
Access variable from a different function from another file
我在目录 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
我想通过另一个文件访问变量 tier
- test_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 文件中为它提供所需的所有参数:(
在 myfunctions.champs_info() 中添加 return 层
并在脚本 test_myfunctions.py 中删除 .tier
您可以通过以下方式访问函数中变量的值:1) return函数中的值,2) 在模块中使用全局变量,或 3) 定义一个 class.
如果只想访问一个函数的局部变量,那么函数应该 return 该值。 class 定义的一个好处是您可以根据需要访问定义任意数量的变量。
1. Return价值
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
已访问全局层变量。
from mypythonlib import myfunctions
def test_champs_info():
myfunctions.champs_info("abomination", 6)
return myfunctions.tier
print(test_champs_info())
3。 class定义:
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())
您只需 return 从 champs_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
test_myfunctions.py
import myfunctions
print(temp.champs_info("americachavez", 6))
就是这样。大功告成。
我在目录 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
我想通过另一个文件访问变量 tier
- test_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 文件中为它提供所需的所有参数:(
在 myfunctions.champs_info() 中添加 return 层
并在脚本 test_myfunctions.py 中删除 .tier
您可以通过以下方式访问函数中变量的值:1) return函数中的值,2) 在模块中使用全局变量,或 3) 定义一个 class.
如果只想访问一个函数的局部变量,那么函数应该 return 该值。 class 定义的一个好处是您可以根据需要访问定义任意数量的变量。
1. Return价值
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
已访问全局层变量。
from mypythonlib import myfunctions
def test_champs_info():
myfunctions.champs_info("abomination", 6)
return myfunctions.tier
print(test_champs_info())
3。 class定义:
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())
您只需 return 从 champs_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
test_myfunctions.py
import myfunctions
print(temp.champs_info("americachavez", 6))
就是这样。大功告成。