Как использовать значение переменной в качестве аргумента - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь использовать значение переменной, которая является строкой, в качестве аргумента, и я получаю ошибку "Str" не вызывается ". Я не использовал 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 и попытался извлечь строку из функции, как показано ниже. Я попытался извлечь строку и передать ее как аргумент функции. s.go(socka['1'], я попытался передать только переменнуюкак аргумент, socka = 'start_miniticker_socket', и я могу заставить это работать, если я использую eval('self.bm'+socka). Я безуспешно пробовал знак процента. Не уверен, как это сделать без использования eval. Я все еще довольно нов и не могу найтиАльтернативный ответ после нескольких часов поиска, который работает. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 26 декабря 2018

Я думаю, что люди имели в виду, когда предлагали диктовать, что-то вроде этого:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...