2016-12-01 4 views
0

Я выполнил функцию каротажа, которая принимает 2 аргумента: log_message и mode. По какой-то причине, когда я использую функцию и передать аргументы, я получаю следующее сообщение об ошибке:Функция, не разрешающая второй аргумент

Traceback (most recent call last): 
    File "/Users/user/git/rip/rip.py", line 248, in <module> 
    main() 
    File "/Users/user/git/rip/rip.py", line 195, in main 
    log('STARTING RIPPER', 'i') 
TypeError: log() takes 1 positional argument but 2 were given 

что странно, так как log() определенно принимает 2 аргумента.

Вот мой код:

import os 
import sys 
import time 
import mmap 
import json 
import requests 
from bs4 import BeautifulSoup 
from clint.textui import puts, colored 

def log(log_message, mode='s'): 
    log_date = '[' + time.strftime("%d.%m_%H:%M:%S") + ']' 
    if mode == 'e': 
     log_file = 'test_error.log' 
     log_ouput = colored.white(log_date) + colored.red('[ERROR]' + log_message) 
    elif mode == 'i': 
     log_file = 'test_info.log' 
     log_ouput = colored.white(log_date) + colored.yellow('[INFO]' + log_message) 
    elif mode == 'c': 
     log_file = 'test_info.log' 
     log_ouput = colored.white(log_date) + colored.white('[COMMENT]' + log_message) 
    else: 
     log_file = 'test_download.log' 
     log_ouput = colored.white(log_date) + colored.green(log_message) 
    with open(log_file, 'a') as file_writer: 
     file_writer.write(log_message + '\n') 
    file_writer.close() 
    puts(log_ouput) 

def main(): 
    log('STARTING RIPPER', 'i') 
+0

Можете ли вы попробуйте создать [Минимальный, * Полный * и Подтверждаемый пример] (http://stackoverflow.com/help/mcve) и показать нам? –

+1

@Someprogrammerdude Что не так с примером? – rhillhouse

+0

Вышеприведенный код выглядит нормально. Нет проблем с аргументами. Сообщите нам, как вы его запускаете. – Raptor

ответ

0

Может быть, ваш переводчик (и не знаю, почему) считает, что 'i' также positonal аргумент (аргумент функции без имени).

Try письма вместо

log('STARTING RIPPER', mode='i') 

И учитывая, что, кстати, явно лучше, чем неявное, вы должны даже написать

log(log_message='STARTING RIPPER', mode='i') 
+0

Это также не работает. Используя ваш код в точности, я получаю следующую ошибку: 'TypeError: log() получил неожиданный аргумент ключевого слова 'mode'' – rhillhouse

+0

@ou_snaaksie. Это похоже на конфликт имен. Попробуйте изменить имя вашей функции 'log', например. для 'lOg'? – Kanak

+0

Изменено, такая же ошибка. – rhillhouse

0

Этот минимальный пример работает для меня:

def log(log_message, mode='s'): 
    print(log_message, mode) 

log('STARTING RIPPER', 'i') 

Я думаю, что вы вызываете log другой log. Попробуйте

print(log.__module__) 

, чтобы узнать, откуда взялась эта функция.

Edit:

Чтобы убедиться, что подпись вашей функции, что вы ожидаете, вы можете использовать

import inspect 
print(inspect.signature(log)) 

, который должен вернуть

(log_message, mode='s') 
+0

Возвращает '__main__' – rhillhouse

Смежные вопросы