小编peh*_*hrs的帖子

Python 2.6中的动态类加载:RuntimeWarning:处理绝对导入时找不到父模块"插件"

我正在开发一个插件系统,插件模块加载如下:

def load_plugins():
   plugins=glob.glob("plugins/*.py")
   instances=[]
   for p in plugins:
      try:
         name=p.split("/")[-1]
         name=name.split(".py")[0]
         log.debug("Possible plugin: %s", name)
         f, file, desc=imp.find_module(name, ["plugins"])
         plugin=imp.load_module('plugins.'+name, f, file, desc)
         getattr(plugin, "__init__")(log)
         instances=instances+plugin.get_instances()
      except Exception as e:
         log.info("Failed to load plugin: "+str(p))
         log.info("Error: %s " % (e))
         log.info(traceback.format_exc(e))
   return instances
Run Code Online (Sandbox Code Playgroud)

代码有效,但是对于插件代码中的每个import语句,我都会收到如下警告:

plugins/plugin.py:2: RuntimeWarning: Parent module 'plugins' not found while handling absolute import
  import os
Run Code Online (Sandbox Code Playgroud)

没有报告主程序代码的错误,插件工作.

有人可以解释警告意味着什么,我做错了什么.我是否需要单独创建一个空的插件模块并导入它以保持python的快乐?

python import plugins dynamic-class-loaders

23
推荐指数
3
解决办法
2万
查看次数

当python脚本有未处理的异常时退出代码

我需要一个方法来运行python脚本文件,如果脚本失败并带有未处理的异常,python应该以非零退出代码退出.我的第一次尝试是这样的:

import sys
if __name__ == '__main__':
    try:
        import <unknown script>
    except:
        sys.exit(-1)
Run Code Online (Sandbox Code Playgroud)

但由于__main__经常使用的防护,它打破了很多脚本.有关如何正确执行此操作的任何建议?

python exit-code

8
推荐指数
1
解决办法
1万
查看次数

高效的数据结构,保持对象在多个键上排序

我有一个python程序,我使用优先级队列来跟踪要处理的对象.目前,队列是使用SortedList实现的,而SortedList工作得非常好.

但是,我需要扩展此代码,以便列表在多个键上保持排序.有点像在多列上有索引的SQL数据库,因此我可以有效地访问,添加和删除所有键上的对象.我的工作量是加/减重.为了了解我想要做什么,这里有一些伪代码:

ml = MultiSortedList()
ml.append((1, "z", 1.5), a)
ml.append((2, "a", 40.0), b)
ml.append((3, "f", 0.5), c)

print(ml.sorted(0))
   [((1, "z", 1.5), a),
   ((2, "a", 40.0), b),
   ((3, "f", 0.5), c),]

print(ml.sorted(2))
   [((3, "f", 0.5), c),
   ((1, "z", 1.5), a),
   ((2, "a", 40.0), b)]

print(ml.sorted(2).pop(1)
   (1, "z", 1.5), a)

print(ml.sorted(0))
   [((2, "a", 40.0), b),
   ((3, "f", 0.5), c)]
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何有效地做到这一点.当然,我可以再次为每个访问不同列的列表排序,但这太贵了.此外,O(n)python列表上的删除操作变得很痛苦,因为列表可能包含数千个对象.

是否有现有的数据结构(最好已经在python中实现)来解决这个问题?如果没有,你能帮我概述一下如何有效地实现这个目标吗?

python sorting heap data-structures

7
推荐指数
1
解决办法
2225
查看次数

在Mac OS X上使用AWK拆分文件

我试图在特定的分隔符上使用AWK拆分文件.awk代码如下所示:

awk '/SEPARATOR/{n++}{print > "part" n ".txt" }' in.txt
Run Code Online (Sandbox Code Playgroud)

这段代码在我的Linux系统上运行得很好.但是当在Mac OS X上运行完全相同的代码时,我会收到以下错误:

awk: syntax error at source line 1
 context is
    /SEPARATOR/{n++}{print > "part" >>>  n <<<  ".txt" }
awk: illegal statement at source line 1
Run Code Online (Sandbox Code Playgroud)

我假设这是OS X附带的awk和Linux上的mawk之间的某种差异.删除打印中的字符串连接会使awk程序在两个平台上都能正常工作,但我更喜欢保留前缀和周期.如何编写一个awk程序,将分隔符上的文件拆分成多个编号的部分并在两个平台上运行?

linux macos awk

5
推荐指数
1
解决办法
3642
查看次数