2016-03-17 77 views
0

我收到以下錯誤時:類型錯誤:錯誤調用元類基礎模塊

Traceback (most recent call last): 
    File "/Users/user/repos/prodigy/Sweeper/envsweeper/lib/python2.7/site-packages/nose/loader.py", line 414, in loadTestsFromName 
    addr.filename, addr.module) 
    File "/Users/user/repos/dr/Sweeper/envsweeper/lib/python2.7/site-packages/nose/importer.py", line 47, in importFromPath 
    return self.importFromDir(dir_path, fqname) 
    File "/Users/user/repos/prodigy/Sweeper/envsweeper/lib/python2.7/site-packages/nose/importer.py", line 94, in importFromDir 
    mod = load_module(part_fqname, fh, filename, desc) 
    File "/Users/user/repos/dr/Sweeper/test.py", line 5, in <module> 
    from SomethingSubclass import SomethingSubclass 
     File "/Users/user/repos/dr/Something/SomethingSubclass.py", line 18, in <module> 
    class SomethingSubclass(SomethingBaseclass): 

TypeError: Error when calling the metaclass bases 
    module.__init__() takes at most 2 arguments (3 given) 

這是Base類代碼:

import os 
import sys 
import inspect 
from settings import picklePass, masterMap 
from decimal import Decimal 
CURRENTDIR = os.path.dirname(
    os.path.abspath(inspect.getfile(inspect.currentframe()))) 
parentdir = os.path.dirname(CURRENTDIR) 
sys.path.insert(0, parentdir) 
from libs.pickler.pickler import Pickler 
import logging 


class BaseClass(object): 

    def __init__(self, address, fee, msg_body): 
     self.address = address 
     self.fee = (fee) 
     self.msg_body = msg_body 

這將是在代碼​​即拋出錯誤,文件名:SubClass.py

import os 
import sys 
import inspect 
import Sweeper 
CURRENTDIR = os.path.dirname(
    os.path.abspath(inspect.getfile(inspect.currentframe()))) 
parentdir = os.path.dirname(CURRENTDIR) 
sys.path.insert(0, parentdir) 
from libs.deterministic import electrum_privkey 
from libs.transaction import sign, mksend 
import logging 
sys.path.insert(0, CURRENTDIR) 


class SubClass(BaseClass): 
    def __init__(self, address, fee, msg_body): 
     BaseClass.__init__(self, address, fee, msg_body) 

這就是子類如何實例化的:

....   
module = __import__('SubClass') 
class_ = getattr(module, 'SubClass') 

任何可能出錯的線索?

+0

'SomethingSubClass.py'文件來自你的回溯?你爲什麼使用'class SomethingSubclass.py(...)',這不是有效的Python代碼。我在發佈的代碼中沒有看到任何元類。錯誤的*完整回溯*是什麼? –

+1

關於發佈的代碼有其他問題。爲什麼所有使用'sys.path'的東西?爲什麼要使用匹配類名稱的模塊名稱,Python不是Java,模塊不必使用與包含它們的類相同的名稱;約定是將lower_case_with_underscores用於模塊名稱(儘可能減少下劃線)。 –

+0

然後是'__import__'的使用,而不是直接導入;你可能有這個用例,但它肯定與手頭的問題無關;你能不能在這裏製作一個[mcve]? –

回答

1
from module'name import class'name 

不要使用

import class'name 

如果你的模塊和類具有相同的名稱。 它會混淆不同的名字。