Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法从类导入_Python_Python 2.7 - Fatal编程技术网

Python 无法从类导入

Python 无法从类导入,python,python-2.7,Python,Python 2.7,我有下面的类和函数。当我试图通过它运行时,我得到: ImportError:无法导入名称请求 这是我的密码: from tests.global_functions.util_helper import util_get_random_customer_individual from tests.global_functions.util_helper import util_get_random_customer_company from requests import Requests im

我有下面的类和函数。当我试图通过它运行时,我得到:

ImportError:无法导入名称请求

这是我的密码:

from tests.global_functions.util_helper import util_get_random_customer_individual
from tests.global_functions.util_helper import util_get_random_customer_company
from requests import Requests
import random


class Customer():
    def __init__(self):
        request = Requests()
        customer = None
        if request.request_type == 'individual':
            customer = util_get_random_customer_individual()
        elif request.request_type == 'company':
            customer = util_get_random_customer_company()
        else:
            print 'What the hell should I do???? HELP!?!?!?!'
回溯如下:

Traceback (most recent call last):
  File "C:/Users/e003048/QA/trunk/automation/selenium/src/webservices/add_customers/webservice_requests.py", line 2, in <module>
    import webservices.system_environment.responses
  File "C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system_environment\responses.py", line 2, in <module>
    import connector
  File "C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system_environment\connector.py", line 3, in <module>
    import requests
  File "C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system_environment\requests.py", line 3, in <module>
    from customer import Customer
  File "C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system_environment\customer.py", line 4, in <module>
    from requests import Requests
ImportError: cannot import name Requests
回溯(最近一次呼叫最后一次):
文件“C:/Users/e003048/QA/trunk/automation/selenium/src/webservices/add_customers/webservice_requests.py”,第2行,在
导入webservices.system\u environment.responses
文件“C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system\u environment\responses.py”,第2行,在
导入连接器
文件“C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system\u environment\connector.py”,第3行,在
导入请求
文件“C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system\u environment\requests.py”,第3行,在
从客户导入客户
文件“C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system\u environment\customer.py”,第4行,在
从请求导入请求
ImportError:无法导入名称请求

不知道我在这里做错了什么,也不知道为什么会出现这个错误。我使用的是PyCharm,导入语句中没有任何错误。

您有循环导入<代码>请求导入<代码>客户,以及<代码>客户导入<代码>请求

Python中实际上允许循环导入,但是如果您试图进行命名导入(即
从foo导入foo
而不是
导入foo
),循环导入就不能很好地工作。Python正在尝试导入
请求
,但要做到这一点,它需要导入
客户
。因此,在导入
请求
的过程中,它开始导入
客户
。然后
customer
说它想查看
requests
中名为
Request
的东西,但是
requests
还没有加载完毕,所以名称还不存在

有几个可能的修复方法:

  • 最简单的方法可能是切换到非命名导入。因此,您必须在
    customer
    模块中说
    requests.Request
    ,而不是
    Request

  • 更好的选择是尝试消除循环依赖。一般来说,循环依赖关系表示事物之间的耦合过于紧密。要么将圆形拉出到第三个模块中,要么合并两个模块

  • 第三种选择,但通常认为是拙劣的风格,是将
    customer
    的导入移到
    requests
    类的定义之下同样,这是一种糟糕的风格,我不推荐它。我在这里提到它只是为了完整,但如果你这样做,你以后几乎肯定会后悔的。


  • 你有循环进口<代码>请求导入<代码>客户,以及<代码>客户导入<代码>请求

    Python中实际上允许循环导入,但是如果您试图进行命名导入(即
    从foo导入foo
    而不是
    导入foo
    ),循环导入就不能很好地工作。Python正在尝试导入
    请求
    ,但要做到这一点,它需要导入
    客户
    。因此,在导入
    请求
    的过程中,它开始导入
    客户
    。然后
    customer
    说它想查看
    requests
    中名为
    Request
    的东西,但是
    requests
    还没有加载完毕,所以名称还不存在

    有几个可能的修复方法:

  • 最简单的方法可能是切换到非命名导入。因此,您必须在
    customer
    模块中说
    requests.Request
    ,而不是
    Request

  • 更好的选择是尝试消除循环依赖。一般来说,循环依赖关系表示事物之间的耦合过于紧密。要么将圆形拉出到第三个模块中,要么合并两个模块

  • 第三种选择,但通常认为是拙劣的风格,是将
    customer
    的导入移到
    requests
    类的定义之下同样,这是一种糟糕的风格,我不推荐它。我在这里提到它只是为了完整,但如果你这样做,你以后几乎肯定会后悔的。


  • 如果没有不同的pythonpath进行干扰,这可能是名称冲突,但也可能是循环导入问题。调用堆栈似乎支持这一点。您是否有自己的名为“requests”的包或模块?@SilasRay是的,我有一个带有
    requests
    类的
    requests
    模块,这就是我试图导入的内容。我建议您尝试从request import*中导入
    ,尽管我不确定是否建议这样做,您没有使用
    请求
    库吗?在任何情况下,看起来您的
    请求
    模块正在尝试导入
    客户
    模块,
    客户
    模块正在尝试导入
    请求
    模块。这是一个循环输入<代码>请求
    请求
    命名空间中还不存在,因为在
    客户
    尝试加载模块之前,模块还没有完全加载。鉴于您对这批代码的其他问题,我认为您需要进行一次重大重构。看起来您基本上使用的是
    请求
    类,就像一个美化的字典一样,同时将
    请求
    上的方法或其子类填充到
    util\u helper
    模块中。您的代码似乎存在基本的结构问题;用黑客补丁解决这个狭隘的问题并不能真正解决你的问题