1
私はifステートメントを変更したい。私は幹部Pythonでexecを使ってIndexErrorを取得する
def set_value(array, negation=False):
equal = "!=" if negation else "=="
for index1, row in enumerate(pattern_map):
for index2, column in enumerate(row):
exec("if array {} column: kar_map[index1][index2]=1".format(equal))
を使用する場合、私は幹部を使用しない場合は、私ははIndexError
Traceback (most recent call last):
File "/home/charlie/Desktop/Projects/Python/karnaugh_map.py", line 234, in <module>
print(kar_map.map_filled)
File "/home/charlie/Desktop/Projects/Python/karnaugh_map.py", line 176, in map_filled
kar_map = self.__class__.filled_map_1(self.__table.count_variable, self.map_pattern, kar_map, variable)
File "/home/charlie/Desktop/Projects/Python/karnaugh_map.py", line 160, in filled_map_1
set_value("")
File "/home/charlie/Desktop/Projects/Python/karnaugh_map.py", line 148, in set_value
exec("if array {} column: kar_map[index1][index2]=1".format(equal))
File "<string>", line 1, in <module>
TypeError: 'Map' object does not support indexing
[Finished in 0.1s with exit code 1]
[cmd: ['/usr/bin/python3.5', '-u', '/home/charlie/Desktop/Projects/Python/karnaugh_map.py']]
[dir: /home/charlie/Desktop/Projects/Python]
[path: /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/opt/ope ncascade/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl]
を取得し、それが動作します。
def set_value(array, negation=False):
for index1, row in enumerate(pattern_map):
for index2, column in enumerate(row):
if negation:
if array != column:
kar_map[index1][index2] = 1
else:
if array == column:
kar_map[index1][index2] = 1
誰でも問題は何ですか?
を変更する必要があります多分これは愚かな質問ですが、なぜあなたは 'exec'の代わりに、非execのコードを使用していますか? – mgilson
まず、この方法でexecを使用しないでください。これはかなり揮発性で、このような問題にぶつかることがあります。私たちがローカルでデバッグできるように、 'pattern_map'と' array 'の例を投稿できますか? – ospahiu