此代碼用於在一個簡單的列表上完美運行,但由於我一直試圖在數據庫上運行它,因此在我的double for循環中出現StopIteration錯誤。 編輯:現在我的問題是我只是沒有得到任何類型的錯誤,命令行是空的,當我運行它。當我在數據庫而不是簡單列表上試用時,爲什麼我的代碼不能在Visual Studio上運行?
這裏是我的代碼:
# -*- coding: utf-8 -*-
import pyodbc
import re
from difflib import SequenceMatcher
[x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]
# Connection to accdb
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=C:\\Users\\alice\\Desktop\\lexique3.accdb;'
)
cnxn = pyodbc.connect(conn_str)
crsr = cnxn.cursor()
# Put all words into a list
crsr.execute("select unites_lexicales from Mot where cat_grammat='Verbe' or 'Nom' or 'Adjectif' or 'Adverbe'")
resultat = crsr.fetchall()
words = [row[0] for row in resultat]
#print(words)
# Remove unwanted characters and put radicals into a list
radicals = []
motifp = "^(an|re|dé|dés)"
motifs = "(ist|man|er|an|able|asyon)$"
for word in words :
word = re.sub(motifp, '', word)
word = re.sub(motifs, '', word)
radicals.append(word)
#print(radicals)
# Match radicals and put words into new lists
ratio = 0.6
n = len(radicals)
result = []
used_js = []
for i in range(n) :
if i in used_js:
continue
matches = [words[i]]
js = (x for x in range(n) if x != i and x not in used_js)
for j in js : # Previous error : StopIteration
if SequenceMatcher(None, radicals[i], radicals[j]).ratio() >= ratio :
matches.append(words[j])
used_js.append(j)
result.append(matches)
print(result)
預期的結果如下(我以前用一個簡單的列表了):
['flore', 'fleur', 'fleuriste'], ['remaniement', 'remanier', 'manier', 'maniable'], ['désaimer', 'aimer', 'aimant'], ['mêler', 'emmêler', 'désemmêler']
已經分別嘗試了代碼的每一部分,一切正常除了for循環之外,還有其他優點 關於爲什麼我不能運行它以及我如何解決這個問題的任何線索都會非常有幫助。 非常感謝!
你可以發佈一個堆棧跟蹤? –
@LaurentLAPORTE如果使用print_stack()的方式工作,則在運行時不會顯示任何內容。 –
@LaurentLAPORTE Visual Studio告訴我絕對沒有錯誤,但代碼仍然不會運行。 –