#python-3.x
#python-3.x
Вопрос:
Это код из GraphWave:
width_basis = 15
nbTrials = 20
### 1. Choose the basis (cycle, torus or chain)
basis_type = "cycle"
### 2. Add the shapes
n_shapes = 5 ## numbers of shapes to add
#shape=["fan",6] ## shapes and their associated required parameters (nb of edges for the star, etc)
#shape=["star",6]
list_shapes = [["house"]] * n_shapes
### 3. Give a name to the graph
identifier = 'AA' ## just a name to distinguish between different trials
name_graph = 'houses' identifier
sb.set_style('white')
add_edges = 0
G, communities, _ , role_id = build_graph.build_structure(width_basis, basis_type, list_shapes, start=0,
add_random_edges=add_edges, plot=True,
savefig=False)
функция build_structure:
def build_structure(width_basis, basis_type, list_shapes, start=0,
rdm_basis_plugins=False, add_random_edges=0,
plot=False, savefig=False):
basis, role_id = eval(basis_type)(start, width_basis)
ошибка при eval()():
имя ‘cycle’ не определено.
Когда я вижу исходный код, функция eval — это eval() . Что означает eval()() и как исправить эту ошибку?
Комментарии:
1.
eval(basis_type)
предполагается, что он возвращает вызываемый объект. Затем вызывается результатeval()
.2. Вместо этого код должен использовать
globals()[basis_type]
, или, что еще лучше, поместить все возможные типы в словарь;basis_types = {}
, со строковыми ключами, указывающими на вызываемые объекты.3. Ошибка вычисления означает только то, что в пространстве имен, где
eval()
выполняется, имяcycle
не определено.
Ответ №1:
Я решил ту же проблему с той же библиотекой:
Прежде всего, обратите внимание, что библиотека поддерживает python 2.7, а не 3.x, как ваши теги.
Я изменил код для поддержки python 3.5, а также иерархию файлов проекта, и это сработало для меня.
Кроме того, для лучшей практики я удалил часть «eval» и вместо этого использовал dictionary, как предложил @Martijn Pieters в комментариях.