2016-12-01 107 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