尝试在字典中使用函数失败,原因是:NameError:name“function\u name”未定义

2024-09-29 19:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我尽量使用函数式编程,因为这样更方便,更容易阅读和纠正。好吧,这是为了解释我的源代码的目的。你知道吗

树形图

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

module_parsing.pymodule_correction.py是我自己定制的模块。你知道吗

模块_解析.py和模块_修正.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

等等。你知道吗

因为我不是完美的,我做了一些解析错误,并想纠正它,这就是为什么对于我的spider的一个特定方法,我考虑创建一个函数,其中包含一个字典,字段作为键,函数(解析函数)作为值。你知道吗

它给出了这样的东西。你知道吗

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 shell中尝试的,但是失败了NameError: name 'function_name' is not defined

在脏壳里试

我在shell中启动scrapy shell https://website.com

导入定制模块后,如Cameron所示,它给出了以下内容。你知道吗

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_correction.py中显式导入module_parsing.py,以获得所有函数及其名称。你知道吗

注意事项: Ubuntu 18.04、Scrapy 1.5.2、Python 3.7.1


Tags: 函数pyimportprojectparseresponseargdesc

热门问题