python - 如何使用变量的值作为参数
问题描述
我正在尝试使用一个变量的值,它是一个字符串,作为参数,我不断收到“'Str' not callable'错误。我没有使用 str 作为变量名,我可以让代码使用eval
,但是,我已经阅读了关于 的可怕警告eval
,所以我不确定该怎么做。我的代码如下。
from time import sleep
from binance.client import Client
from binance.websockets import BinanceSocketManager
class s33():
def __init__(self):
self.client = Client("", "")
self.bm = BinanceSocketManager(self.client)
def process_trade_message(self, message):
global count, conn_key
print(count)
if count >= 10:
print('closing socket')
# use either stop_socket or close, or both
self.bm.stop_socket(conn_key)
self.bm.close()
# reset the count
count = 0
def go(self, sockb):
global count, conn_key
print(sockb['1'])
sock = 'self.bm.'+sockb['1']
print(sock)
count = 0
conn_key = sock(self.process_trade_message)
self.bm.start()
if __name__ == '__main__':
while True:
s = s33()
socka = {'1':'start_miniticker_socket'}
s.go(socka)
sleep(20)
print('sleeping')
我读过人们推荐使用 dict,所以我将 dict 作为 arg 传递并尝试在函数中提取字符串,即下面的代码。我试图提取字符串并将其作为 arg 传递给函数。s.go(socka['1']
,我尝试将变量作为参数传递,如果我使用百分号但没有运气socka = 'start_miniticker_socket'
,我可以让它工作。eval('self.bm'+socka)
不知道如何在不使用 eval 的情况下执行此操作。我还是很新,经过几个小时的搜索后找不到替代答案。任何帮助,将不胜感激。
解决方案
我认为人们在建议 dict 时的意思是这样的:
class s33():
# Codes...
def go(self, func_name):
global count, conn_key
print(func_name)
mapper = {
'start_miniticker_socket': self.bm.start_miniticker_socket
}
# Get self.bm.start_miniticker or None
sock = mapper.get(func_name)
print(sock)
if sock:
count = 0
conn_key = sock(self.process_trade_message)
self.bm.start()
else:
pass # Handle when sock is None
if __name__ == '__main__':
while True:
s = s33()
socka = 'start_miniticker_socket'
s.go(socka)
sleep(20)
print('sleeping')
推荐阅读
- azure - 如何使用 Azure 门户使用 Health Endpoint Monitoring Pattern?
- python - 由于“未指定目标且未找到生成文件”,Pip install h3 失败
- angular - 将服务工作者安装到现有应用程序的角度错误
- java - 具有可重试和可跳过异常的 jsr 352 批处理可能会多次处理项目
- android - Admob 横幅广告无法加载,错误代码:3 无填充
- r - 从向量中选择关于时间和 R 值的值
- c# - 从父节点中删除所有子节点,除了一个特定的 C# 中的 xml
- c# - c#.net Restful API 适用于调试/发布,但不适用于 IIS
- angular - 为什么 Webpack 包含子目录中的所有文件?
- java - 设置水平 RecyclerView