python - 获取 TypeError:rndm_json_data_gen() 缺少 1 个必需的位置参数:'rangenum'
问题描述
错误信息:
TypeError: rndm_json_data_gen() missing 1 required positional argument: 'rangenum'
。
我看不出缺少什么。我在 stackoverflow 上查看了许多类似的线程,但看不出有什么适用于我的情况。
此代码首先在终端运行,即 Python handler.py
:
#########################################################
## HANDLER.PY ##
#########################################################
import psycopg2
from lib.feeder import Feeder
from lib.tle import TLE
from lib.import_data import IMPORTDATA
from lib.random_json import DATA_GEN
##TECHNICALLY THIS COMES PRE-LOADED
conn_string = "database connection"
# print the connection string we will use to connect
#print("Connecting to database\n ->%s" % (conn_string))
# get a connection, if a connect cannot be made an exception will be raised here
conn = psycopg2.connect(conn_string)
##THIS IS THE PART THAT I’M TRYING TO GET TO WORK
TypeProcessor = IMPORTDATA()
num_json_items = 5
#####Error happens with last item here######
Feeder(conn).insertOrUpdateItem("database_table", TypeProcessor.getDictionary(),
TypeProcessor.getIds(), TypeProcessor.getModifiedKey(), TypeProcessor.getUpdateOnConflict(),
DATA_GEN.rndm_json_data_gen(num_json_items))
print("Import Data complete")
'''
## Below was what was in the last spot, where the problem is occurring,
## before I started changing it to a method
{"uuid": "UUID1", "column1": "data1", "column2": data2, "column3": "data3", \
"column4": "data4", "file_name": "filename", "load_date": "2020-12-09"}
#########################################################
## IMPORT_DATA.PY ##
#########################################################
modified_key = "load_date"
update_on_conflict = True
ids = ["uuid"]
dictionary = {
"uuid": {"input_field": "uid", "update_on_conflict": False},
"column1": {"input_field": "column1", "update_on_conflict": True},
"column2": {"input_field": "column2", "update_on_conflict": True},
"column3": {"input_field": "column3", "update_on_conflict": True},
"column4": {"input_field": "column4", "update_on_conflict": True},
"load_date": {"input_field": "load_date", "update_on_conflict": True}
};
class IMPORTDATA():
def getDictionary(self):
return dictionary;
def getIds(self):
return ids;
def getModifiedKey(self):
return modified_key;
def getUpdateOnConflict(self):
return modified_key;
###############################################
## RANDOM_JSON.PY ##
###############################################
import json
from faker import Faker
import random
from random import randint
from datetime import datetime
class DATA_GEN():
def rndm_json_data_gen(self,rangenum):
fake = Faker()
Faker.seed(0)
for _ in range(rangenum):
import_data={
"uuid": fake.bothify(text='UUUID##########'),\
"column1": fake.bothify(text='Data##'), \
"column2": fake.bothify(text='##'), \
"column3": fake.bothify(text='##'), \
"file_nm": fake.file_name(), \
“import_date”: datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
}
return import_data;
解决方案
您已将其定义rndm_json_data_gen
为实例方法,但您将其称为静态方法。因此,该self
参数不会自动实现。你要么需要先实例化它,
data_gen = DATA_GEN()
Feeder(conn).insertOrUpdateItem("database_table", TypeProcessor.getDictionary(),
TypeProcessor.getIds(), TypeProcessor.getModifiedKey(), TypeProcessor.getUpdateOnConflict(),
data_gen.rndm_json_data_gen(num_json_items))
或标记它@staticmethod
并删除self
参数。由于您没有self
在方法主体中使用,我认为您不妨将其设为静态。
顺便说一句,官方 Python 风格调用 PascalCase 类名,而不是 CAPS。
推荐阅读
- java - 如何在不将其作为参数传递的情况下使用 HttpServletRequest 获取服务器名称和端口
- sql-server - 在 sum 中嵌套 Case 语句 - SQL Server
- angular - 处理 JWT 令牌和 cas 登录状态
- typescript - 推断字典属性中的通用类型
- sql-server - 如何使用外部表 Sql Server 2017 定义主键
- jpa - JPA 语句“翻译”的问题
- java - 当文件夹重命名或移动到新驱动器时,如何找到 bash 文件的文件路径?
- ios - 按下 UILabel 时分配变量值以打开 Apple 地图
- c# - 使用带有随机根名称的 c# 反序列化 json
- json - 在 JSON 中接收 c# 字典序列化,并且需要在我的 angular 6 (typscript) 网站中对其进行反序列化