最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Python程序错误:TypeError: ‘NoneType’ object is not iterable

Python crifan 31740浏览 0评论

【问题】

如下代码:

def callBlogFunc(funcToCall, *paraList):

    funcName = funcToCall.func_name;
    if(blogIsNetease()):
        trueFunc = getattr(BlogNetease, funcName);
        logging.info("Now will cll netease function: %s", funcName);
    elif (blogIsBaidu()) :
        trueFunc = getattr(BlogBaidu, funcName);
        logging.info("Now will cll baidu function: %s", funcName);
    else:
        logging.error("Invalid blog provider");
        sys.exit(2);
        return;
        
    print "trueFunc=",trueFunc;
    
    paraLen = len(paraList);
    print "paraLen=",paraLen;
    
    if(paraLen == 1):
        return trueFunc(paraList[0]);
    elif (paraLen == 2):
        return trueFunc(paraList[0], paraList[1]);
    elif (paraLen == 3):
        return trueFunc(paraList[0], paraList[1], paraList[2]);
    elif (paraLen == 4):
        return trueFunc(paraList[0], paraList[1], paraList[2], paraList[3]);
    elif (paraLen == 5):
        return trueFunc(paraList[0], paraList[1], paraList[2], paraList[3], paraList[4]);
    elif (paraLen == 6):
        return trueFunc(paraList[0], paraList[1], paraList[2], paraList[3], paraList[4], paraList[5]);
    elif (paraLen == 7):
        return trueFunc(paraList[0], paraList[1], paraList[2], paraList[3], paraList[4], paraList[5], paraList[6]);
    elif (paraLen == 8):
        return trueFunc(paraList[0], paraList[1], paraList[2], paraList[3], paraList[4], paraList[5], paraList[6], paraList[7]);
    else :
        logging.error("Not support function parameters exceed 8 !");
        sys.exit(2);
        return;



def extractBlogUser(inputUrl):
    return callBlogFunc(extractBlogUser, inputUrl);
    
def doPrepareWork(inputUrl):

    # 2. extract blog user and blog entry url from input url
    (extractOK, extractedBlogUser, generatedBlogEntryUrl) = extractBlogUser(inputUrl);

另外一个文件BlogBaidu.py中包含对应的所调用的函数:
def extractBlogUser(inputUrl):
    (extractOk, extractedBlogUser, generatedBlogEntryUrl) = (False, "", "");
    # some code ...
    return 

运行出错:

Traceback (most recent call last):

  File "D:\tmp\WordPress\Others\to_wp\BlogsToWordpress\BlogsToWordpress_v2012-03-22-office\BlogsToWordpress_v2012-03-22-office.py", line 1389, in <module>

    main();

  File "D:\tmp\WordPress\Others\to_wp\BlogsToWordpress\BlogsToWordpress_v2012-03-22-office\BlogsToWordpress_v2012-03-22-office.py", line 1288, in main

    doPrepareWork(srcURL);

  File "D:\tmp\WordPress\Others\to_wp\BlogsToWordpress\BlogsToWordpress_v2012-03-22-office\BlogsToWordpress_v2012-03-22-office.py", line 1135, in doPrepareWork

    (extractOK, extractedBlogUser, generatedBlogEntryUrl) = extractBlogUser(inputUrl);

TypeError: ‘NoneType’ object is not iterable

【解决过程】

1.以为是上面的callBlogFunc的最后的else分支中,只是return而导致的错误呢,所以把:

else :

    logging.error("Not support function parameters exceed 8 !");

    sys.exit(2);

    return;

改为:

else :

    logging.error("Not support function parameters exceed 8 !");

    sys.exit(2);

    return trueFunc(paraList[0]);

结果问题依旧。

2.无意间尝试出来,如果doPrepareWork中,直接调用extractBlogUser是可以的:

extractBlogUser(inputUrl);

但是还是未找到错误原因。

3. 最后才发现,原来是文件BlogBaidu.py中所包含的extractBlogUser,最后是return,没有返回对应的所需要的值,

所以,把BlogBaidu.py中所包含的extractBlogUser的return改为:

return (extractOk, extractedBlogUser, generatedBlogEntryUrl);

就解决了问题了。

【总结】

此处出现:

TypeError: ‘NoneType’ object is not iterable

的原因在于,最终所被调用的函数所返回的值,和返回值赋值给的变量,不匹配。

此处即为,最终所调用的函数是extractBlogUser,其return为空,所以把返回的空的值,赋值给

(extractOK, extractedBlogUser, generatedBlogEntryUrl)

才会出现类型错误TypeError,才会提示NoneType,即extractBlogUser所return回来的None,是not iterable的。

如果再次出现类似错误,那么就去找找你所调用的函数的返回的值的类型,是否和返回值所赋值的变量的类型,两者是否匹配

转载请注明:在路上 » 【已解决】Python程序错误:TypeError: ‘NoneType’ object is not iterable

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
89 queries in 0.205 seconds, using 22.09MB memory