前提・実現したいこと
対話システムでユーザデータを作ってユーザデータごとに分けて格納する機能を作りました。
さらにユーザデータのファイルを検索して、ファイル内にある、対話ログを使えるようにしたいです。
ファイルを開く機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "demo.py", line 78, in <module> hatsuwa_wadai,kanrenbun=google_kensaku.in2kanrenbun(hatsuwa_wadai,words,u) File "google_kensaku.py", line 288, in in2kanrenbun wadai = wadai_suitei(keys,words) File "google_kensaku.py", line 259, in wadai_suitei with open('log/{0}{1}_log.txt'.format(dt,name), 'r',encoding='utf-8') as f: NameError: name 'name' is not defined
該当のソースコード
Python
1 2demo.py 3 4import maeshori 5import MeCab_mrphs 6import make_sentence_list 7import reply 8import google_kensaku 9import datetime 10from zatsuyou import * 11 12dt_now = datetime.datetime.now() 13dt = datetime.date.today() 14print('S:名前を入力してください') 15name = input('U:') 16print('S:こんにちは') 17print('S:何かお話ししましょうか') 18path = 'log/{0}{1}_log.txt'.format(dt,name) 19with open(path, mode='a') as f: 20 f.write("\n{0}{1} log start\n".format(dt_now,name)) 21 f.write("S:名前を入力してください\n") 22 f.write("U:{}\n".format(name)) 23 f.write("S:こんにちは\n") 24 f.write("S:何かお話ししましょうか\n\n\n") 25 26wadai_num=0 27p_wadai=[] 28hatsuwa_wadai=[] 29last_out="" 30while 1: 31 32 wadai=[] 33 kanren_out="" 34 wadai_out="" 35 kanren_out_original="" 36 handan_kijun="" 37 keitaiso = [] 38 u = input("U:") 39 if u == '': 40 continue 41 42 with open(path, mode='a') as f: 43 f.write("U:{} ".format(u)) 44 45 u = maeshori.re_replace(u) 46 47 keitaiso = MeCab_mrphs.input2mrphs(u) 48 49 words,kd_flag=make_sentence_list.make_words_list(keitaiso,hatsuwa_wadai) 50 51 if words: 52 hatsuwa_wadai,kanrenbun=google_kensaku.in2kanrenbun(hatsuwa_wadai,words,u) 53 54 w_f=0 55 if len(p_wadai)==len(hatsuwa_wadai): 56 wadai_num=0 57 for i,w in enumerate(p_wadai): 58 if p_wadai[i]==hatsuwa_wadai[i]: 59 wadai_num=wadai_num+1 60 if wadai_num==len(p_wadai): 61 w_f=1 62 63 if len(hatsuwa_wadai)==2: 64 wadai_out="話題は「{}」と「{}」".format(hatsuwa_wadai[0],hatsuwa_wadai[1]) 65 elif len(hatsuwa_wadai)==1: 66 wadai_out="話題は「{}」".format(hatsuwa_wadai[0]) 67 print("({})".format(wadai_out)) 68 69 70 if kanrenbun[1] and kanrenbun[0]==last_out: 71 kanren_out=kanrenbun[1] 72 last_out=kanrenbun[1] 73 #print(kanrenbun[3]) 74 handan_kijun=kanrenbun[3] 75 kanren_out_original=kanrenbun[1] 76 else: 77 kanren_out=kanrenbun[0] 78 last_out=kanrenbun[0] 79 #print(kanrenbun[2]) 80 handan_kijun=kanrenbun[2] 81 kanren_out_original=kanrenbun[0] 82 if kd_flag==1: 83 #kanren_out="そうなのですか。" + kanren_out 84 a=0 85 86 kanren_out=reply.make_kanrenbun(kanren_out) 87 88 if len(hatsuwa_wadai)==1 and w_f==0: 89 #kanren_out = kanren_out + "\nS:" + hatsuwa_wadai[0] + "はどうでしたか?" 90 a=0 91 elif len(hatsuwa_wadai)==1 and w_f==1: 92 kanren_out = hatsuwa_wadai[0] + "が好きなのですか?" 93 elif len(hatsuwa_wadai)==2 and w_f==1: 94 kanren_out = "そうなのですか。\nS: 何か、違う話もしませんか?" 95 if kd_flag==2: 96 kanren_out="何かあったのですか? NO NOUN ERROR" 97 else: 98 kanren_out="何かあったのですか? NO NOUN ERROR" 99 100 p_wadai=hatsuwa_wadai 101 102 temp_rep = reply.make_temp_rep(u) 103 104 if temp_rep !="": 105 rep='S:{}'.format(temp_rep) 106 else: 107 rep="S:"+kanren_out 108 109 110 print(rep) 111 112 with open(path, mode='a') as f: 113 f.write("\n") 114 if temp_rep =="": 115 f.write("----------------------------------------------\n") 116 f.write("入力文は「{}」\n".format(u)) 117 f.write("推定された{}\n".format(wadai_out)) 118 f.write("関連文は「{}」\n".format(kanren_out_original)) 119 if len(handan_kijun)==3: 120 f.write("意味の近い単語は「{}」と「{}」({})\n".format(handan_kijun[0],handan_kijun[1],handan_kijun[2])) 121 f.write("出力文は「{}」\n".format(kanren_out)) 122 f.write("----------------------------------------------\n") 123 f.write("{}\n\n\n".format(rep)) 124 125 if u == 'さようなら' or u == 'またね': 126 break 127
試したこと
'dt'と'name'がないというエラーメッセージが出たので、'dt'は'google_kensaku'で定義したのですが、'name'も同じように定義したところ、demo.pyで定義している入力された名前ではなく、対話中に入力された文の名前のファイルを探してしまい、ファイルが存在しないとエラーが出ました。
'google_kensaku.py'を'demo.py'にインポートしてあるので、インポートした先での情報をインポートする前のファイルでも読み込めるようにしたいです。
この方法、もしくは別の方法をご存知の方がいらっしゃいましたら、教えていただけると幸いです。
> NameError: name 'name' is not defined
> 'name'も同じように定義したところ、demo.pyで定義している入力された名前ではなく、対話中に入力された文の名前のファイルを探してしまい、ファイルが存在しないとエラーが出ました。
「NameError: name 'name' is not defined」のエラーについては既に解決済とのことでしょうか?現在の問題が分かりにくくなっています。
コメントありがとうございます。
「NameError: name 'name' is not defined」のエラーはまだ解決できていません。
'dt'と'name'はファイルに対話ログを格納するためのファイル名を指定する関数になっています。
google_kensaku.pyをdemo.pyにインポートしているのですが、demo.pyで使っている'name'と'dt'の関数を'google_kensaku.py'でも利用したいです。
'demo.py'を'google_kensaku.py'にインポートするとエラーが発生してしまうため、'demo.py'のファイルと同じように入力すると'dt'は正常に読み込めるのですが、'name'は'name = input('U:')'と定義してしまうと、ユーザの名前ではなく、ユーザが入力した文だとシステムが認識してしまい、そのようなファイルは存在しないと言われてしまいます。
質問のエラーメッセージを見るとエラー発生行はdemo.pyの中の「hatsuwa_wadai,kanrenbun=google_kensaku.in2kanrenbun(hatsuwa_wadai,words,u)」となっています。が、demo.pyにはそのようなコードはありません。どういうことでしょうか?
動作確認可能なコードがないと回答は難しいです。
申し訳ありません。
コードが結構長かったため、自分が必要だと感じたところだけを勝手に判断してしまい、切り取って載せてしまいました。
demo.pyとgoogle_kensaku.pyのコードを全て載せさせていただきます。
どうかよろしくお願いいたします。
demo.py
import maeshori
import MeCab_mrphs
import make_sentence_list
import reply
import google_kensaku
import datetime
from zatsuyou import *
dt_now = datetime.datetime.now()
dt = datetime.date.today()
print('S:名前を入力してください')
name = input('U:')
print('S:こんにちは')
print('S:何かお話ししましょうか')
path = 'log/{0}{1}_log.txt'.format(dt,name) ##対話ログのフォルダ名 例:2020年2月25日の場合は2020-02-25_log.txt 同じ日の場合はすでにあるログに追記します。
with open(path, mode='a') as f:
f.write("\n{0}{1} log start\n".format(dt_now,name))
f.write("S:名前を入力してください\n")
f.write("U:{}\n".format(name))
f.write("S:こんにちは\n")
f.write("S:何かお話ししましょうか\n\n\n")
wadai_num=0
p_wadai=[]
hatsuwa_wadai=[]
last_out=""
while 1:
wadai=[]
kanren_out=""
wadai_out=""
kanren_out_original=""
handan_kijun=""
keitaiso = []
u = input("U:")
if u == '':
continue
with open(path, mode='a') as f:
f.write("U:{} ".format(u))
#################################################
#######前処理部分#################################
################################################
u = maeshori.re_replace(u) #前処理をかけて形態素解析のバグを回避する。方言などを標準語に戻したりなど。
keitaiso = MeCab_mrphs.input2mrphs(u) #形態素解析の結果
#print(keitaiso)
###########発話内容の単語リスト作成##############
#発話内容中の単語のリストを作成する。優先順位もこの時につけておく。
#入力:keitaisoは形態素群、hatsuwa_wadaiは前の話題
#出力:wordsは発話内容中の単語のリスト、kd_flagは形容動詞語幹があるかのフラグ(エラー処理にも使う)。
words,kd_flag=make_sentence_list.make_words_list(keitaiso,hatsuwa_wadai)
#kd_flagはkeiyodoshigokan_flag。形容動詞語幹が入っているかどうかを判定している。
#形容動詞語幹があれば1、無ければ0、そもそも単語群が作れなければ2を返す。
#print(words)
if words:
#print("hatsuwa_wadai is {}".format(hatsuwa_wadai))
#print("words is {}".format(words))
#print("u is {}".format(u))
#######関連文検索#########
#入力:hatsuwa_wadaiは前の話題、wordsは発話内容の単語のリスト、uは入力文
#出力:hatsuwa_wadaiは更新された現在の話題、kanrenbunは関連している文章
hatsuwa_wadai,kanrenbun=google_kensaku.in2kanrenbun(hatsuwa_wadai,words,u)
#print("hatsuwa_wadai is {}".format(hatsuwa_wadai))
#print("kanrenbun is {}".format(kanrenbun))
#話題が変わっているかの判定。話題が変わっていたらw_fは0。まったく同じ話題の場合はw_fは1。
w_f=0
if len(p_wadai)==len(hatsuwa_wadai):
wadai_num=0
for i,w in enumerate(p_wadai):
if p_wadai[i]==hatsuwa_wadai[i]:
wadai_num=wadai_num+1
if wadai_num==len(p_wadai):
w_f=1 ##話題全く同じ
#現在の話題を出力。必要に応じてコメントアウトしてください。
if len(hatsuwa_wadai)==2:
wadai_out="話題は「{}」と「{}」".format(hatsuwa_wadai[0],hatsuwa_wadai[1])
elif len(hatsuwa_wadai)==1:
wadai_out="話題は「{}」".format(hatsuwa_wadai[0])
print("({})".format(wadai_out))
#まったく同じ応答を生成しないための処理
if kanrenbun[1] and kanrenbun[0]==last_out:
kanren_out=kanrenbun[1]
last_out=kanrenbun[1]
#print(kanrenbun[3])
handan_kijun=kanrenbun[3]
kanren_out_original=kanrenbun[1]
else:
kanren_out=kanrenbun[0]
last_out=kanrenbun[0]
#print(kanrenbun[2])
handan_kijun=kanrenbun[2]
kanren_out_original=kanrenbun[0]
if kd_flag==1:
#kanren_out="そうなのですか。" + kanren_out
a=0
#関連文を雑談らしく加工。
kanren_out=reply.make_kanrenbun(kanren_out)
#まったく同じ話題が続いたときに応答を変化させる。
if len(hatsuwa_wadai)==1 and w_f==0:
#kanren_out = kanren_out + "\nS:" + hatsuwa_wadai[0] + "はどうでしたか?"
a=0
elif len(hatsuwa_wadai)==1 and w_f==1:
kanren_out = hatsuwa_wadai[0] + "が好きなのですか?"
elif len(hatsuwa_wadai)==2 and w_f==1:
kanren_out = "そうなのですか。\nS: 何か、違う話もしませんか?"
if kd_flag==2:
kanren_out="何かあったのですか? NO NOUN ERROR"
else:
kanren_out="何かあったのですか? NO NOUN ERROR"
#現在の話題を前の話題として保持しておく
p_wadai=hatsuwa_wadai
#################################################
#######応答作成###################################
#################################################
######テンプレート応答かどうかを判断する#######
temp_rep = reply.make_temp_rep(u)
#####応答作成######
if temp_rep !="":
rep='S:{}'.format(temp_rep)
else:
rep="S:"+kanren_out
print(rep)
#ログ記録用の処理
with open(path, mode='a') as f:
f.write("\n")
if temp_rep =="":
f.write("----------------------------------------------\n")
f.write("入力文は「{}」\n".format(u))
f.write("推定された{}\n".format(wadai_out))
f.write("関連文は「{}」\n".format(kanren_out_original))
if len(handan_kijun)==3:
f.write("意味の近い単語は「{}」と「{}」({})\n".format(handan_kijun[0],handan_kijun[1],handan_kijun[2]))
f.write("出力文は「{}」\n".format(kanren_out))
f.write("----------------------------------------------\n")
f.write("{}\n\n\n".format(rep))
if u == 'さようなら' or u == 'またね':
break
google_kensaku.py 前半
from bs4 import BeautifulSoup
import requests
import re
import sni_w2v
import suggest
import datetime
def google_kensaku(keys,num,w_flag):
url = 'https://www.google.co.jp/search'
result = requests.get(url, params={'q': keys , 'num' : num+1})
#print("result is {}".format(result))
error_flag="{}".format(result)
if error_flag=="<Response [200]>":
#print("GET SNIPET")
a=0
elif error_flag=="<Response [429]>":
print("*****API ERROR*****")
print("本プログラムはGoogleのAPIを用いて作成されています.")
print("GoogleのAPIは検索クエリを100秒に100件までと制限しています.")
print("このエラーはその制限を超えてしまい,Googleから検索結果を取得できなくなった場合に表示されます.")
print("制限が解除されるのが何時になるのか私には分かりません.")
print("感覚的には大体1日ぐらい置いておくと治ってます.")
print("機嫌が直るまでそっとして置いてあげてください.")
print("*******************")
"""
wikiの見出し
<div class="BNeawe deIvCb AP7Wnd">
wikiのカテゴリ
<div class="BNeawe tAd8D AP7Wnd">
wikiのスニペット
<div class="BNeawe s3v9rd AP7Wnd">
検索されたページのタイトル
<div class="BNeawe vvjwJb AP7Wnd">
検索されたページのスニペット
<div class="BNeawe s3v9rd AP7Wnd">
"""
b=0
sni=""
soup = BeautifulSoup(result.text, 'html.parser')
wiki_f = soup.findAll(True, {'class' : 'UykT9d'})
#print(wiki_f)
if w_flag==1:
if wiki_f:
midashi = soup.findAll(True, {'class' : 'BNeawe deIvCb AP7Wnd'})
w_m = str(midashi[0]).strip('<div class="BNeawe deIvCb AP7Wnd">')
wiki_midashi = re.sub("<.*","",w_m)
category = soup.findAll(True, {'class' : 'BNeawe tAd8D AP7Wnd'})
w_c = str(category[0]).strip('<div class="BNeawe tAd8D AP7Wnd">')
wiki_category = re.sub("<.*","",w_c)
w_snippet = soup.findAll(True, {'class' : 'BNeawe s3v9rd AP7Wnd'})
sni = str(w_snippet[0]).strip('<div class="BNeawe s3v9rd AP7Wnd">')
wiki_snippet = re.sub("<.*","",sni)
b=2
#print("wiki_flag is on")
#print("wiki_midashi is {}".format(wiki_midashi))
#print("wiki_category is {}".format(wiki_category))
#print("wiki_snippet is {}".format(wiki_snippet))
return wiki_category
else:
return ""
titles = soup.findAll(True, {'class' : 'BNeawe vvjwJb AP7Wnd'})
snippets = soup.findAll(True, {'class' : 'BNeawe s3v9rd AP7Wnd'})
#print(len(snippets))
title_list=[]
for title in titles:
title = str(title)
title = re.sub('<div class="BNeawe vvjwJb AP7Wnd">',"",title)
title = re.sub("\.\.\..*","",title)
result_title = re.sub("<.*","",title)
title_list.append(result_title)
#print("title is {}".format(result_title))
sni_list=[]
count=0
for sni in snippets:
sni = str(sni)
sni = re.sub('<div class="BNeawe s3v9rd AP7Wnd">',"",sni)
sni = re.sub('<span.*/span>',"",sni)
sni = re.sub('<div>',"",sni)
#print(sni)
sni = re.sub(r"\n","",sni)
sni = re.sub("\xa0","",sni)
sni = re.sub("\.\.\.","",sni)
sni = re.sub(" ","",sni)
result_sni = re.sub(r"<.*","",sni)
if sni_list and (sni_list[-1]==result_sni or result_sni=="" or len(result_sni)<20):
continue
sni_list.append(result_sni)
#print(count)
count=count+1
#print("snippet is {}".format(result_sni))
t_len=len(title_list)
if t_len>num:
title_list=title_list[:num]
#print(t_len)
sni_list=sni_list[:num-t_len]
kensaku_kekka=[]
max=len(title_list)
if len(title_list)>len(sni_list):
max=len(sni_list)
###############################ばぐります
for i in range(max):
#print(i)
#print('title is {}'.format(title_list[i]))
#print(sni_list)
#print('snippet is {}'.format(sni_list[i]))
#print(sni_list[i])
kensaku_kekka.append([title_list[i],sni_list[i]])
return kensaku_kekka
def sni_judge(searched_list,keys):
snippets=[]
count=0
for sni in searched_list:
snippets.append(sni[1])
for i,sni in enumerate(snippets):
#print(i)
#print(sni)
if keys[0] in sni and keys[1] in sni:
#print(i)
count=count+1
return count
def sni_ha_tyushutu(keys,maxlen=30):
with open('data\{0}_snippets.txt'.format('_'.join(keys)), 'r',encoding='utf-8') as f:
with open('data\{0}_ha.txt'.format('_'.join(keys)), 'w',encoding='utf-8') as f2:
for line in f:
for k in keys:
if (k+"は") in line and len(line)<maxlen and len(line)>10:
f2.write("{0},{1}".format(k,line))
f2.close()
f.close()
def sni_clo_vec(in_s,keys):
with open('data\{0}_ha.txt'.format('_'.join(keys)), 'r',encoding='utf-8') as f:
vcm=["","",0]
vcm2=["","",0]
max_sentence=""
max2_sentence=""
for line in f:
line = re.sub("\n","",line)
snis=line.split(",")
#print(snis[1])
vc=sni_w2v.sentences_closed_vec_search(in_s,snis[1])
if len(vc)==3 and len(vcm)==3 and vc[2] > vcm[2]:
vcm2=vcm
max2_sentence=max_sentence
max_sentence=snis[1]
vcm=vc
elif len(vc)==3 and len(vcm)==3 and vc[2] > vcm2[2]:
max2_sentence=snis[1]
vcm2=vc
print("input sentence is " + in_s)
print("out sentence is {}".format(max_sentence))
print("handan kijun is ")
print(vcm)
print("out sentence is {}".format(max2_sentence))
print("handan kijun is ")
print(vcm2)
return [max_sentence,max2_sentence,vcm,vcm2]
def kensaku_write(keys,num,w_flag):
keys_str = ' '.join(keys)
#print("keys_str is {}".format(keys_str))
#print("num is {}".format(num))
#print("w_flag is {}".format(w_flag))
sni_list=google_kensaku(keys_str,num,w_flag)
#print("sni_list is {}".format(sni_list))
if w_flag==0:
with open('data\{0}_snippets.txt'.format('_'.join(keys)), 'w',encoding='utf-8') as f:
for s in sni_list:
sni_txt = re.sub(r"([。|!|\.|?])[^。!\.?]+$","\\1",s[1])
if not ("." in sni_txt or "。" in sni_txt or "!" in sni_txt or "?" in sni_txt) :
continue
sni_txt = re.sub(r"([。|!|\.|?])","\\1\n",sni_txt)
sni_txt = re.sub("[「|」]","",sni_txt)
f.write("{}".format(sni_txt))
elif w_flag==1:
return sni_list
#num=sni_judge(sni_list,keys)
#print(num)
def input2wadai(p_wadai,meishis):
words=[]
try:
with open('./data/{}_suggest.txt'.format(p_wadai), 'r',encoding='utf-8') as f:
#print("{}のサジェストあったよ".format(p_wadai))
words=[]
for w in f:
w = re.sub("\n","",w)
words.append(w.split(","))
except FileNotFoundError:
#print("{}のサジェストないよ".format(p_wadai))
suggest.make_suggest(p_wadai)
with open('./data/{}_suggest.txt'.format(p_wadai), 'r',encoding='utf-8') as f:
#print("{}のサジェスト作ったよ".format(p_wadai))
for w in f:
w = re.sub("\n","",w)
words.append(w.split(","))
### words 例 [['靴', '15'], ['イラスト', '14'], ['結晶', '8'], ['ブーツ', '8']]
for m in meishis:
for w in words:
if m == w[0]:
return m
return []
def keizoku_judge(keys,words):
kanren=""
keizoku_wadai=""
new_wadai=""
for k in reversed(keys):
print("[{}] の words {}".format(k,words))
kanren=input2wadai(k,words)
print("kanren is [{}] and [{}]".format(kanren,k))
if kanren:
keizoku_wadai=k
new_wadai=kanren
if keizoku_wadai and new_wadai:
#print("関連単語 「{}」 と 「{}」".format(keizoku_wadai,new_wadai))
return [keizoku_wadai,new_wadai]
else:
#print("関連する単語がないよ")
return []
def keizoku_judge2(wadai_out,words):
kanren=""
keizoku_wadai=""
new_wadai=""
for k in reversed(wadai_out):
print("[{}] の words {}".format(k,words))
kanren=input2wadai(k,words)
print("kanren is [{}] and [{}]".format(kanren,k))
if kanren:
keizoku_wadai=k
new_wadai=kanren
if keizoku_wadai and new_wadai:
#print("関連単語 「{}」 と 「{}」".format(keizoku_wadai,new_wadai))
return [keizoku_wadai,new_wadai]
else:
#print("関連する単語がないよ")
return []
def wadai_suitei(keys,words):
#dt = datetime.date.today()
#name =
with open('log/{0}{1}_log.txt'.format(dt,name), 'r',encoding='utf-8') as f:
if len(keys)>0:
wadais = keizoku_judge(keys,words)
if not wadais:
wadais = [words[0]]
return wadais
elif len(keys) == 0:
for wadai_out in f:
wadais2 = keizoku_judge2(wadai_out,words)
if not wadais:
wadais2 = [words[0]]
return wadais2
else: ##keysがなかった時のエラー処理。ここに来たらマズイ
print("***w_flag error***")
print("フラグがなんかバグってます")
print("******************")
wadai = [words[0]]
return wadai
google_kensaku.py 後半
def in2kanrenbun(keys,words,input_s):
#print("keys's len is {}".format(len(keys)))
if len(keys)==0: ##keysに何もなければw_flagを立てる
w_flag=1
else:
w_flag=0
#print("w_flag is {}".format(w_flag))
if w_flag==0:
wadai = wadai_suitei(keys,words)
#wadai=["小樽", "あんかけ焼きそば"]
kensaku_write(wadai,100,w_flag)
sni_ha_tyushutu(wadai,maxlen=50)
kanrenbun=sni_clo_vec(input_s,wadai)
elif w_flag==1:
wadai=[words[0]]
#wadai=["小樽", "あんかけ焼きそば"]
wiki = kensaku_write(wadai,100,w_flag)
print(wiki)
if wiki:
wiki_joho=wadai[0] + "といえば" + wiki+ "ですよね"
kanrenbun=[wiki_joho,"","",""]
elif len(wadai)==1:
kanrenbun=[wadai[0]+"ですか","","",""]
return wadai,kanrenbun
google_kensaku.pyのコードがかなり長かったため、2つに別れてしまいました。
申し訳ありませんが宜しくお願い致します。
ここに書いていただいても、インデントが消えてしまいコードが読めません。質問は編集出来ますので、質問に追記お願いします。
本文には文字数制限で書き換えることができなかったため、コメント欄に全てのコードを書かせていただきました。
申し訳ありません。
インデントのことまで頭が回っていませんでした。
申し訳ありません。
文字数制限ギリギリで書ける範囲まで、質問を編集させていただきます。
遅くなり申し訳ございません。
demo.pyは文字数制限大丈夫だったのですが、google_kensaku.pyは文字数オーバーしてしまったため、写真で載せさせていただきました。
変数のスコープが違うと参照できないので、処理に必要な変数は関数の引数として渡す方法が良いと思います。
ありがとうございます!
プログラミングの知識があまりないのですが、
関数の引数として渡すということはwadai_suitei(keys, words, dt, name):とすれば良いということでしょうか。
それで良いと思います。
そのように変更した場合、ファイルが違うためかこのようなエラーが出てしまうのですが、どうすれば良いでしょうか。
Traceback (most recent call last):
File "demo.py", line 78, in <module>
hatsuwa_wadai,kanrenbun=google_kensaku.in2kanrenbun(hatsuwa_wadai,words,u)
File "google_kensaku.py", line 288, in in2kanrenbun
wadai = wadai_suitei(keys,words)
TypeError: wadai_suitei() missing 2 required positional arguments: 'dt' and 'name'
すません。何か勘違いしてました。下記追加修正してください。
google_kensaku.in2kanrenbun(hatsuwa_wadai,words,u)をgoogle_kensaku.in2kanrenbun(hatsuwa_wadai,words,u, dt, name)にすれば良いかと思いました。
そうすればin2kanrenbun関数の中でdtとnameが使えるようになるはずです。(もちろんin2kanrenbun関数の引数も修正します)
そして、wadai = wadai_suitei(keys,words)もwadai = wadai_suitei(keys,words,dt,name)とすれば良いでしょう。
こんな時間までありがとうがざいます!
無事に実行できました!!
あなたの回答
tips
プレビュー