2017-02-10 4 views
-1

Я вызываю функцию, подобную этой в python.positional argument следует за аргументом ключевого слова

order_id = kite.order_place(self, exchange, tradingsymbol, 
transaction_type, quantity, price, product, order_type, validity, 
disclosed_quantity=None, trigger_price=None, squareoff_value, 
stoploss_value, trailing_stoploss, variety, tag='') 

Вот код из документации функции ..

def order_place(self, exchange, tradingsymbol, transaction_type, 
quantity, price=None, product=None, order_type=None, validity=None, 
disclosed_quantity=None, trigger_price=None, squareoff_value=None, 
stoploss_value=None, trailing_stoploss=None, variety='regular', tag='') 

Это дает ошибку, как это ..

enter image description here

Как устранить эту ошибку? Спасибо!

+1

Либо добавьте больше ключевых слов, либо удалите их. –

+0

Сообщение об ошибке сообщает вам точно, что случилось. Посмотрите на документацию. Узнайте, что означают фразы «позиционный аргумент» и «аргумент ключевого слова». Он тебя не убьет. Обещаю. –

+0

Я искал его. Если вы знаете решение, разместите его. Я не могу понять, что случилось –

ответ

1

grammar of the language указывает, что позиционные аргументы появляются перед ключевым словом или помеченных аргументов в вызовах:

argument_list  ::= positional_arguments ["," starred_and_keywords] 
          ["," keywords_arguments] 
          | starred_and_keywords ["," keywords_arguments] 
          | keywords_arguments 

В частности, ключевое слово аргумент выглядит следующим образом: tag='insider trading!' в то время как позиционные аргумент выглядит следующим образом: ..., exchange, .... Проблема заключается в том, что вы, похоже, скопировали/вставили список параметров и оставили некоторые из значений по умолчанию, что делает их похожими на ключевые слова, а не на позиционные. Это прекрасно, за исключением того, что вы снова возвращаетесь к использованию позиционных аргументов, что является синтаксической ошибкой.

Также, если аргумент имеет значение по умолчанию, например price=None, это означает, что вам не нужно его предоставлять. Если вы не предоставите его, он будет использовать значение по умолчанию.

Чтобы устранить эту ошибку, конвертировать позже позиционные аргументы в именованных аргументов, или, если они имеют значения по умолчанию, и вы не должны использовать их, просто не указывать их вообще:

order_id = kite.order_place(self, exchange, tradingsymbol, 
    transaction_type, quantity) 

# Fully positional: 
order_id = kite.order_place(self, exchange, tradingsymbol, transaction_type, quantity, price, product, order_type, validity, disclosed_quantity, trigger_price, squareoff_value, stoploss_value, trailing_stoploss, variety, tag) 

# Some positional, some keyword (all keywords at end): 

order_id = kite.order_place(self, exchange, tradingsymbol, 
    transaction_type, quantity, tag='insider trading!') 
Смежные вопросы