🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

17573閲覧

takes 1 positional argument but 2 were given

yuujiMotoki

総合スコア90

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/08/31 10:55

#内容

クラスのコンストラクタで、URLを引数にしてHTMLをパースして、これをDBに入れる処理を書いています。

#不具合

クラスの中から、クラスを呼び出す部分で、引数が合わないというエラーが出ています。

error

1 File "C:\Users\mm05162\WebApp\patent\dbmodels.py", line 74, in __init__ 2 data = self._url_perse(url) 3TypeError: _url_perse() takes 1 positional argument but 2 were given

#質問内容

引数の書き方としては、間違ってはいないと認識しています。

メソド定義時は def Function(self,argc) で 2つの引数を定義
内部で呼ぶときは a=self.function(argc)    で 1つの引数で良い

何故かエラーとなり、ここで躓いています。

すみませんが、お知恵を拝借祖せていただきたいと思います。

python

1database.py 2from sqlalchemy import create_engine 3from sqlalchemy.orm import scoped_session,sessionmaker 4from sqlalchemy.ext.declarative import declarative_base 5import os 6import pdb 7 8database_file = os.path.join(os.path.abspath(os.path.dirname(__file__)),'data.db') 9#SQLITE 10engine = create_engine('sqlite:///'+database_file,convert_unicode=True,echo=True) 11db_session = scoped_session( 12 sessionmaker( 13 autocommit=False, 14 autoflush = False, 15 bind =engine 16 ) 17) 18Base = declarative_base() 19Base.query = db_session.query_property() 20 21def init_db(): 22 import patent.dbmodels 23 Base.metadata.create_all(bind=engine) 24

python

1dbmodels.py 2 3from sqlalchemy import Column , Integer ,String , Boolean 4from patent.database import Base 5 6import requests 7import json 8import pdb 9from bs4 import BeautifulSoup 10import pandas as pd 11import os 12from pyquery import PyQuery 13 14urll = 'https:****************' 15categories = [("BIJ",1), 16 ("IPC",2), 17 ("FT",3), 18 ("ABJ",4), 19 ("CLJ",5), 20 ("DEJ",6), 21 ("FIELD",7), 22 ("BACKGROUND",8), 23 ("SUBJECT",9), 24 ("MEANS",10), 25 ("OPERATION",11), 26 ("EFFECT",12), 27 ("EDJ",13), 28 ("DRJ",14)] 29 30class MapiosMaster(Base): 31 #テーブルの設定 Mapiosマスタ 32 __tablename__ = "Mapios_maseter" 33 #Column情報の設定 34 patent_number = Column(String,primary_key=True) 35 BIJ = Column(String) # 36 IPC = Column(String) # 37 FT= Column(String) 38 ABJ= Column(String) # 39 CLJ= Column(String) # 40 DEJ= Column(String) # 41 FIELD= Column(String) # 42 BACKGROUND= Column(String) # 43 SUBJECT= Column(String) # 44 MEANS= Column(String) # 45 OPERATION= Column(String) # 46 EFFECT= Column(String) # 47 EDJ= Column(String) # 48 DRJ= Column(String) # 49 50 def _url_perse(self,url): 51 pq = PyQuery(url) 52 flg = False 53 txt = "" 54 stri = {} 55 num = 0 56 for x in pq.items('td'): 57 for y in x.items('a'): 58 try: 59 k = y.attr('name') 60 if k in categories.keys() :#'record start' 61 if flg == False: 62 flg = True 63 else: 64 stri[title]=txt 65 txt = "" 66 title = k 67 del categories[k] 68 num = num + 1 69 except: 70 break 71 if flg == True: 72 txt = txt + x.text() 73 return stri 74 75 def __init__(self,url=None,patent_number=None): 76 data = self._url_perse(url) 77 self.patent_number= patent_number 78 self.BIJ= data["BIJ"] 79 self.IPC= data["IPC"] 80 self.FT= data["FT"] 81 self.ABJ= data["ABJ"] 82 self.CLJ= data["CLJ"] 83 self.DEJ= data["DEJ"] 84 self.FIELD= data["FIELD"] 85 self.BACKGROUND= data["BACKGROUND"] 86 self.SUBJECT= data["SUBJECT"] 87 self.MEANS= data["MEANS"] 88 self.OPERATION= data["OPERATION"] 89 self.EFFECT= data["EFFECT"] 90 self.EDJ= data["EDJ"] 91 self.DRJ= data["DRJ"] 92

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

簡単なエラー再現例で、上は通って下は通りません(質問文と同様に引数多すぎと出る)。
違ったらすみませんが、ファイルをちゃんと保存してなくて下の例の様に引数定義が抜けててたりはしないですか?
あと、質問文にはエラーの全文を載せたほうが有用な回答がつくと思いますよ。

python3

1class test(): 2 def __init__(self, url=None): 3 self.data = self._url_perse(url) 4 def _url_perse(self, url): 5 return url + "_perse" 6t1 = test("http") 7print(t1.data) 8# http_perse

python3

1class test(): 2 def __init__(self, url=None): 3 self.data = self._url_perse(url) 4 def _url_perse(self): # 引数urlなし 5 return url + "_perse" 6t1 = test("http") 7print(t1.data) 8# TypeError: _url_perse() takes 1 positional argument but 2 were given

投稿2020/09/01 01:27

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuujiMotoki

2020/09/10 07:20

ありがとうございます 結局、ClassのinitメソドからCALLすることを辞めました。 現時点ではオブジェクトを作ってから、url_perseメソドを呼ぶ構成にしました。 エラーの詳細までは、突き詰めていませんが ご指摘の内容で、どこかが間違っていたように思います。 回答いただき有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問