Попытка использовать функции внутри словаря завершается неудачно с: NameError: name 'имя_функции' не определено - PullRequest
1 голос
/ 10 июля 2019

Я стараюсь максимально использовать функциональное программирование, потому что это удобнее и, прежде всего, легче читать и исправлять.Ну, это должно было объяснить цель моего исходного кода.

древовидная диаграмма

scrapy_project
 |_ scrapy.cfg
 |_ scrapy_project
    |_ __init__.py
    |_ module_parsing.py
    |_ module_correction.py
    |_ items.py
    |_ ...
    |_ spiders
        |_ crawling_spider.py

module_parsing.py и module_correction.py - мои собственные модули.

module_parsing.py и module_correction.py

В module_parsing.py у меня есть такие функции.

import re
import datetime as dt
import dateparser

def noms_entraineurs(response, arg_disc):
    """Return a list of names"""
    ent = parse instructions
    return ent

и т. д.

И поскольку я не совершенен,Я делаю некоторые ошибки синтаксического анализа и хочу исправить это, поэтому для конкретного метода моего паука я думаю о создании функции со словарем внутри нее с полем в качестве ключа и функцией (функцией синтаксического анализа) в качестве значения.

Это дает что-то вроде этого.

from .module_parsing import *
def fonction_parse_correction(
    field, response, arg_desc, arg_disc, arg_true_false):

    dico_fonction_parse = {
    'discipline': discipline(arg_desc),
    ...
    'entraineurs' : noms_entraineurs(response,
                                arg_disc),
    ...
    }
    return dico_fonction_parse[field]

Вот так, я надеюсь, мне просто нужно написать:

fonction_parse_correction(field, response, arg_desc, arg_disc, arg_true_false)

Это то, что я попробовал воболочка scrapy, но она не удалась с NameError: name 'function_name' is not defined

, пытаясь в оболочке scrapy

Я запустил в оболочке scrapy shell https://website.com

После того, как я импортировал настроенные модули, как показано Камерон это дает следующее.

In [1]: import sys                                                              

In [2]: sys.path.insert(0,'/home/user/directory_a/.../scrapy_project/scrapy_project')
In [3]: from module_parsing import * 
#and it worked well here
...
In [7]: from module_correction import * 
...
In [10]: fonction_parse_correction('entraineurs',response,arg_desc,'attele',False)

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-10-137e645b094c> in <module>
----> 1 fonction_parse_correction('entraineurs',response,arg_desc,'attele',False)

~/.../scrapy_project/scrapy_project/module_correction.py in fonction_parse_correction(field, response, arg_desc, arg_disc, arg_true_false)
     50 
     51     dico_fonction_parse = {
---> 52     'allocation': allocation_devise(response)[0],
     53     'devise': allocation_devise(response)[1],
     54     'hippodrome':hippodrome_numreu_prix(response)[0],

NameError: name 'allocation_devise' is not defined

Итак, я хотел бы знать, почему я получил этоNameError в то время как я явно импортировал module_parsing.py в module_correction.py, чтобы получить все функции и их имена.

Примечания: Ubuntu 18.04, Scrapy 1.5.2, Python 3.7.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...