Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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_Import_String Interpolation - Fatal编程技术网

Python 使用变量“插值”创建导入语句

Python 使用变量“插值”创建导入语句,python,import,string-interpolation,Python,Import,String Interpolation,我有一长串可能需要导入的文件。我只需要其中一个,它们都有相同的界面。选择支付网关以处理支付 假设我有一个字典,它表示所有网关文件的名称 i、 e 我根据数据库中的信息知道这本词典的索引。因此,如果我收到网关值为1的支付流程请求,我知道它需要由Authorize.net处理。A 2将由Pay Simple处理。等等 我希望能够创建一个import语句,它是用我所知道的信息构建的,而不是一个可怕的elif语句列表 考虑下面的简单方法: # For the purposes of this examp

我有一长串可能需要导入的文件。我只需要其中一个,它们都有相同的界面。选择支付网关以处理支付

假设我有一个字典,它表示所有网关文件的名称

i、 e

我根据数据库中的信息知道这本词典的索引。因此,如果我收到网关值为1的支付流程请求,我知道它需要由Authorize.net处理。A 2将由Pay Simple处理。等等

我希望能够创建一个import语句,它是用我所知道的信息构建的,而不是一个可怕的elif语句列表

考虑下面的简单方法:

# For the purposes of this example assume payment_gateway is defined
# elsewhere and represents the key to the dictionary
gateway_file = gateways.get(payment_gateway)

import_str = "from gateway_interface.%s import process" % gateway_file
gogo(import_str)
其中gogo是导致import语句实际导入的一种方法

这是可能的吗?

看一看允许您访问导入语句内部的模块,或者方法本身-我认为这两种方法中的任何一种都应该允许您实现您所描述的功能。

看一看允许您访问导入语句内部的模块,或者方法本身——我认为,这两种方法中的任何一种都可以让您实现所描述的目标。

内置的导入方法应该可以:

process = __import__(gateways.get(payment_gateway)).process
内置导入方法应该可以工作:

process = __import__(gateways.get(payment_gateway)).process
简单的

process = __import__('gateway_interface.'+gateway_file,fromlist=['foo']).process
编辑:只要fromlist不是空列表,fromlist中的“foo”可以是任何内容。这一点奇怪的现象在本文中得到了解释

我还必须编辑,因为在我的第一篇文章中,导入并没有如中进一步描述的那样正常工作

如果您有Python2.7

import importlib
process = importlib.import_module('gateway_interface.'+gateway_file).process
Waaay cool将使用软件包工具,例如从pkg_资源导入iter_入口点

这可以为您提供一个解决方案,以找到正确的功能,即使它们位于不在gateway_接口下的奇数包中。如果他们都在同一个地方,你不需要太多的赛特点,所以。。。是的,只是简单的导入

process = __import__('gateway_interface.'+gateway_file,fromlist=['foo']).process
编辑:只要fromlist不是空列表,fromlist中的“foo”可以是任何内容。这一点奇怪的现象在本文中得到了解释

我还必须编辑,因为在我的第一篇文章中,导入并没有如中进一步描述的那样正常工作

如果您有Python2.7

import importlib
process = importlib.import_module('gateway_interface.'+gateway_file).process
Waaay cool将使用软件包工具,例如从pkg_资源导入iter_入口点


这可以为您提供一个解决方案,以找到正确的功能,即使它们位于不在gateway_接口下的奇数包中。如果他们都在同一个地方,你不需要太多的赛特点,所以。。。是的,只是导入,你确定你的流程只处理一次付款然后退出吗?这听起来很不寻常。我不知道这有什么不寻常之处。如果您进行网上购物并请求结帐,为什么要使用多个网关处理交易?您一次只能使用一个网关,但通常情况下,网上购物将由一个在其生命周期内处理多个请求的长时间运行的流程来处理。@Ned Batchelder您能详细说明这个想法吗?我不太明白为什么让进程运行会有好处。我们正在使用Django并发布到一个视图,这将产生这个过程。您是否建议更好的方法来处理此问题?您确定您的流程只处理一次付款然后退出吗?这听起来很不寻常。我不知道这有什么不寻常之处。如果您进行网上购物并请求结帐,为什么要使用多个网关处理交易?您一次只能使用一个网关,但通常情况下,网上购物将由一个在其生命周期内处理多个请求的长时间运行的流程来处理。@Ned Batchelder您能详细说明这个想法吗?我不太明白为什么让进程运行会有好处。我们正在使用Django并发布到一个视图,这将产生这个过程。你有没有建议一个更好的方法来处理这个问题?这对我来说不太管用,我也不确定我做错了什么。我得到了以下错误:“module”对象没有属性“process”,我将测试,不确定您尝试了两种方法中的哪一种。网关文件子目录中是否有uuu init_uuuu.py?所有内容都在同一模块网关接口中。我需要导入的文件有一个名为process的类,我需要实例化它。是的,网关接口有uuu init.py。我修复了getattr版本。我还将fromlist关键字添加到了_导入_。我将在回答中发布一篇编辑文章,解释为什么需要这样做,但这是包与模块导入之间的区别。当前编辑应该可以工作。是的,太棒了!实际上,我在2.7版本之前和importlib版本中都尝试过。我喜欢后者这对我不太管用,我也不确定我做错了什么。我得到了以下错误:“module”对象没有属性“process”,我将测试,不确定您尝试了两种方法中的哪一种。网关文件子目录中是否有uuu init_uuuu.py?所有内容都在同一模块网关接口中。这个
我需要导入的文件有一个名为process的类,我需要实例化它。是的,网关接口有uuu init.py。我修复了getattr版本。我还将fromlist关键字添加到了_导入_。我将在回答中发布一篇编辑文章,解释为什么需要这样做,但这是包与模块导入之间的区别。当前编辑应该可以工作。是的,太棒了!实际上,我在2.7版本之前和importlib版本中都尝试过。我喜欢后者