2017-01-04 9 views
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 

誰でも問題は何ですか?

+0

を変更する必要があります多分これは愚かな質問ですが、なぜあなたは 'exec'の代わりに、非execのコードを使用していますか? – mgilson

+1

まず、この方法でexecを使用しないでください。これはかなり揮発性で、このような問題にぶつかることがあります。私たちがローカルでデバッグできるように、 'pattern_map'と' array 'の例を投稿できますか? – ospahiu

答えて

0

1行のif文を使用する場合は、実行するコードの後ろにif部分を置きます。さらに、.format(equal)は意味をなさない。あなたは何を同等にしたいですか?等号(=)を変更する場合は、.format(equals = equal)を使用し、={equals}に変更する必要があります。あなたは

exec("kar_map[index1][index2] {equals} 1 if array {} column".format('=' = equal)) 

exec("if array {} column: kar_map[index1][index2]=1".format(equal)) 

関連する問題