我有一个实用程序模块utils.py,它使用请求来执行一些任务。在客户端代码(使用utils)中,我需要处理 引发的异常requests,但我想避免requests隐式导入(即在客户端中)。我怎样才能做到这一点?
utils.py是(简化)
import requests
def download(url):
# stuff
return requests.get(url)
Run Code Online (Sandbox Code Playgroud)
我希望client.py是这样的
import utils # <-- no "import requests"
try:
utils.download(whatever)
except HTTPError: # <-- not "requests.exceptions.HTTPError"
do stuff
Run Code Online (Sandbox Code Playgroud)
except utils.something也会起作用的。该名称不需要是全局的。我想要的只是避免requests在客户的任何地方提及。
对于那些想知道的人来说,这只是一个关注点分离的问题。client.py不应该关心具体utils.download是如何实现的以及它使用的底层较低级别的库。
我有一个手动维护的 python 函数和模块列表,将由遗传算法使用,我希望能够重复调用这些函数和模块并监视结果。
import os
from random import randint
def main():
toolList = [{'file':'test1.py', 'function':'sum_even_numbers', 'args':['list'], 'return':['int']},
{'file':'test1.py', 'function':'get_min_even_num', 'args':['list'], 'return':['int']} ]
for tool in toolList:
for i in range(0,3):
run(tool, [randint(10,99) for j in range(1,randint(2,5))])
def run(tool, args):
mod = __import__( os.path.basename(tool['file']).split('.')[0])
func = getattr(mod, tool['function'])
tool['return'] = func(args)
print('main called ' + tool['file'] + '->' + tool['function'] + ' with ', args, ' = ', tool['return'])
main()
Run Code Online (Sandbox Code Playgroud)
def sum_even_numbers(numbers):
return sum([i for i in numbers if …Run Code Online (Sandbox Code Playgroud) 我正在使用 Flask-Restful 开发 Restful API,其资源比我想在 app.py 中保留的资源多。所以我应用了建议的项目结构。现在我想从资源访问api.url_for()from app import api以生成一些链接,但似乎我必须这样做。
为了避免循环导入,我当前的解决方案是进行惰性导入。但还有更好的方法,对吗?
app.py:
from flask import Flask
from flask_restful import Api
from myapi.resources.foo import Foo
from myapi.resources.bar import Bar
from myapi.resources.baz import Baz
app = Flask(__name__)
api = Api(app)
api.add_resource(Foo, '/Foo', '/Foo/<str:id>')
api.add_resource(Bar, '/Bar', '/Bar/<str:id>')
api.add_resource(Baz, '/Baz', '/Baz/<str:id>')
Run Code Online (Sandbox Code Playgroud)
resource/foo.py(bar.py分别):
from flask_restful import Resource
from bar import Bar
class Foo(Resource):
def get(self):
from app import api
related = api.url_for(Bar, foo=self.id)
return {'Foo':self.id, 'related_bar':related}, …Run Code Online (Sandbox Code Playgroud) 假设我编写了一个必须使用该imp模块的 python 包,并且我的包是“TestModule”,如下所示:
import imp
import pip
import sys
def update_and_reload(module, *args, **kwargs):
pip.main(['install', module, '--upgrade', '--user'])
return imp.reload(module)
Run Code Online (Sandbox Code Playgroud)
当我import TestModule在终端中执行此操作时,我收到了有关 的待弃用警告imp。我如何使imp的警告不发生/过滤掉?
这是创建按钮对象的简单代码行
btn = QtGui.QPushButton('Button')
Run Code Online (Sandbox Code Playgroud)
并给出这个错误
AttributeError: module 'PyQt5.QtGui' has no attribute 'QPushbutton'
Run Code Online (Sandbox Code Playgroud)
这些是我的进口
from PyQt5 import QtGui
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
Run Code Online (Sandbox Code Playgroud)
我正在运行 Python(3.5.2)32Bit 和 PyQt5 32bit 的兼容版本我也尝试过 QtGui.QLabel 但没有运气。
在名为BinarySearch.py我的文件中有以下内容:
class SearchResult:
def __init__(self):
self.was_found = False
self.index = 0
def __str__(self):
s = "SearchResult"
s = s + " was found: "
s = s + str(self.was_found) + "index: " + str(self.index)
return s
Run Code Online (Sandbox Code Playgroud)
在另一个文件中,假设它被命名为file2.py我有:
import os
cwd = os.getcwd()
import sys
sys.path.append(cwd)
import BinarySearch
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行时file2.py,我收到以下错误消息:
NameError: name 'SearchResult' is not defined
Run Code Online (Sandbox Code Playgroud)
看起来import BinarySearch实际上并没有导入BinarySearch
我正在使用 Spyder IDE。两个文件 (BinarySearch.py和file2.py) 都在同一目录中。另外,我转到 Tool > PYTHONPATH manager 并将目录添加到路径中。我还尝试重新启动 spyder,看看这是否是路径更改生效所需的内容。它仍然不起作用。 …
我正在尝试使用该adspy包为我的 KNN 分类器绘制决策边界,但是每当我使用该包时,它都不会导入。我已经使用conda提示下载了几次,但没有任何反应。
带有错误信息的代码:
from adspy_shared_utilities import plot_fruit_knn
plot_fruit_knn(X_train, y_train, 5, 'uniform')
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-7-ddf0c07df9f1> in <module>()
----> 1 from adspy_shared_utilities import plot_fruit_knn
2
3 plot_fruit_knn(X_train, y_train, 5, 'uniform')
ModuleNotFoundError: No module named 'adspy_shared_utilities'
Run Code Online (Sandbox Code Playgroud)
请问我该如何解决?
我正在尝试在 python 中导入 json 模块。
我以为我应该重新安装 json,但是键入时pip uninstall json出现错误,提示我未安装它。
尝试使用 pip 安装它时,我收到一条消息,说找不到它。也许尝试使用 pip 安装或卸载这个模块是愚蠢的,因为我太新而无法理解。我也很感激对此的解释。这是我尝试时收到的错误消息import json。
Traceback (most recent call last):
File "json_exp.py", line 1, in <module>
import json
File "C:\Users\hp\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 106, in <module>
from .decoder import JSONDecoder, JSONDecodeError
File "C:\Users\hp\AppData\Local\Programs\Python\Python38-32\lib\json\decoder.py", line 3, in <module>
import re
File "C:\Users\hp\AppData\Local\Programs\Python\Python38-32\lib\re.py", line 125, in <module>
import functools
File "C:\Users\hp\AppData\Local\Programs\Python\Python38-32\lib\functools.py", line 17, in <module>
from collections import namedtuple
ImportError: cannot import name 'namedtuple' from 'collections' (C:\Users\hp\Desktop\Programs and stuff\Python\collections.py)
Run Code Online (Sandbox Code Playgroud) from math import floor和 和有import math.floor什么区别?
from math import floor - 完美运行。
import math.floor - 不起作用。
我假设它.用于引用文件而floor不是文件,它只是math?
我正在查看 的来源gunicorn,这是一个非常受欢迎的项目。
在gunicorn/app/wsgiapp.py模块中,该模块定义了一个类,然后从同一个文件中导入该类:
class WSGIApplication(Application):
...
def run():
from gunicorn.app.wsgiapp import WSGIApplication
WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
Run Code Online (Sandbox Code Playgroud)
该类定义在同一个模块中,在上面。为什么需要导入它?
如果我注释掉的第一行run()功能(进口线),gunicorn运行完全正常(不崩溃) -至少在路上我遇到它,用:gunicorn mysite.wsgi:application,mysite是我的测试Django项目的名称。
这是一个备受瞩目的项目,如果不需要此导入,我想现在有人会删除它。这种进口有原因吗?
python ×10
python-import ×10
python-3.x ×3
flask ×1
import ×1
package ×1
pyqt5 ×1
python-2.7 ×1
spyder ×1
warnings ×1