2016-12-01 158 views
0

我做了一個日誌功能,它有兩個參數:log_messagemode。出於某種原因,當我使用的功能和參數傳遞,我得到以下錯誤:函數不允許第二個參數

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()絕對需要兩個參數。

這裏是我的代碼:

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

能不能請你到什麼創建一個[Minimal,* Complete *和Verifiable示例](http://stackoverflow.com/help/mcve)並向我們展示? –

+1

@Someprogrammerdude這個例子有什麼問題? – rhillhouse

+0

上面的代碼看起來沒問題。爭議沒有問題。請讓我們知道你如何運行它。 – Raptor

回答

0

也許你的解釋(不知道爲什麼)認爲,'i'也是positonal參數(沒有名字的參數功能)。

嘗試寫而不是

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

而且鑑於此,順便說一句,明顯優於隱式,你甚至應該寫

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

這也行不通。完全使用你的代碼,我得到以下錯誤:'TypeError:log()得到了一個意想不到的關鍵字參數'mode'' – rhillhouse

+0

@ou_snaaksie。它看起來像名稱衝突。嘗試更改您的「日誌」功能的名稱,例如爲'10g'? – Kanak

+0

改變了它,同樣的錯誤。 – rhillhouse

0

這個小例子,對我的作品:

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

log('STARTING RIPPER', 'i') 

我認爲你打電話給的是log 0。嘗試

print(log.__module__) 

找出函數來自哪裏。

編輯:

要確保你的函數的簽名是你期望的那樣,你可以使用

import inspect 
print(inspect.signature(log)) 

應返回

(log_message, mode='s') 
+0

返回'__main__' – rhillhouse