功能不允许第二个参数

时间:2016-12-01 10:39:11

标签: python-3.x arguments

我创建了一个日志记录功能,它有两个参数: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()肯定需要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')

2 个答案:

答案 0 :(得分:0)

也许你的翻译(并且不知道为什么)认为'i'也是一个正面的论证(没有名字的论证函数)。

尝试改为编写

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

考虑到这一点,顺便说一句,显式优于隐式,你甚至应该写

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

答案 1 :(得分:0)

这个最小的例子对我有用:

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

log('STARTING RIPPER', 'i')

我认为您呼叫的log是不同的log。尝试

print(log.__module__)

找出函数的来源。

修改

要确保您的功能的签名符合您的期望,您可以使用

import inspect
print(inspect.signature(log))

应返回

(log_message, mode='s')