2016-12-01 10 views
0

2つの引数:log_messagemodeをとるログ機能を作成しました。2番目の引数を許可しない関数

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

を返すべき

import inspect print(inspect.signature(log)) 

を使用することができ、あなたがしてみてくださいすることができ[Minimal、* Complete *、およびVerifiable Example](http://stackoverflow.com/help/mcve)を作成して表示しますか? –

+1

@Someprogrammerdudeこの例で何が問題になっていますか? – rhillhouse

+0

上記のコードはOKです。議論に問題はありません。どのように実行するかお知らせください。 – Raptor

答えて

0

たぶんあなたのインタプリタは(そしてその理由がわからない)'i'もpositonal引数(名前のない引数の関数)であると考えています。

試し書きの代わり

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

そして、ところで、明示的、暗黙よりも優れている、ということを考えると、あなたもこの最小限の例では、私の作品

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

これも機能しません。あなたのコードを正確に使用すると、次のエラーが発生します: 'TypeError:log()は予期しないキーワード引数 'mode''を持っています – rhillhouse

+0

@ou_snaaksie。それは名前の競合のように見えます。あなたの 'log'関数の名前を変更してみてください。 '10g'のために? – Kanak

+0

同じエラーが変更されました。 – rhillhouse

0

書く必要があります。

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

log('STARTING RIPPER', 'i') 

あなたが呼んでいるのはlogだと思います。log。機能がどこにあるのかを調べるには、

print(log.__module__) 

を試してください。

編集:

は、あなたの関数のシグネチャは、あなたが期待するものであることを確認するために、あなたは

(log_message, mode='s') 
+0

返品 '__main__' – rhillhouse

関連する問題