TypeError:只能加入可迭代的python [英] TypeError: can only join an iterable python

查看:742
本文介绍了TypeError:只能加入可迭代的python的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将分隔符插入由上一个函数(ifw(in_list))创建的字符串中。我对\n或\t没有任何问题,但是一旦我的代码进入状态,join就会崩溃。我尝试了几种不同的解决方案,并在网站上浏览了类似的问题/答案,但我不断收到TypeError:只能加入可迭代对象。您能提供给我的任何帮助将不胜感激。

I'm trying to insert delimiters into a string that was created by a previous function (ifw(in_list)). I'm not having any issues with \n or \t but once my code gets to "," join it breaks down. I've tried a few different solutions and looked through similar questions/answers on the site but I keep getting the TypeError: can only join an iterable. Any help you can provide me would be very apprciated.

#! /usr/bin/env python
import os
import sys
import re  
delim = os.getenv("QWIKIFWLISTMGR_DELIMITER")
in_list = sys.argv

def delim(in_list):
    x = "screw python"
    x = os.getenv('QWIKIFWLISTMGR_DELIMITER')
    if 'BLANK' in x:
        x = ' '.join(ifw(in_list))
        return x
    elif 'TAB' in x:
        x = ifw(in_list)
        x = '\t'.join(x)
        return x
    elif 'NL' in x:
        x = ifw(in_list)
        x = '\n'.join(x)
        return x
    elif 'COMMA' in x:
        x = ','.join(str(x) for x in (ifw(in_list)))
        return 
    elif 'COLON' in x:
        x = ifw(in_list)
        x = ':'.join(x)
        return x
    elif 'SEMICOLON' in x:
        x = ifw(in_list)
        x = ';'.join(x)
        return x
    elif 'SLASH' in x:
        x = ifw(in_list)
        x = '/'.join(x)
        return x
    else:
        x = ifw(in_list)
        return





def ifw(in_list):
    usr_choice = (in_list)[1]
    if usr_choice == 'i':
        print(int_sort(in_list))
    elif usr_choice =='f':
        print(float_sort(in_list))
    elif usr_choice == 'w':
        print(word_sort(in_list))





def float_sort(in_list):
    float_sort = "test"
    sorted_float = "test"
    float_sort = in_list[2:]
    float_sort = ''.join(float_sort)
    #float_sort1 = " ".join(list((re.findall(r"((?<!\S)\d+(?!\S))", float_sort))))
    #float_sort2 = ' '.join(list(re.findall(r"(\d+\.\d+)", float_sort)
    float_sort = "  ".join(re.findall(r"\d*\.\d+|\d+", float_sort))
    sorted_float = sorted(float_sort, key=len)
    return float_sort

#print (float_sort(in_list))

def word_sort(in_list):
     word_sort = " 1a "
     word_sort = sorted(in_list[2:], key=len) #in_list must be 2 because the program will view usr input as a word
     for i in word_sort:
         punctuation = '.',',',';','!',' / ','"','?' #strips punctuation from words
         if i in punctuation: #removes punctuation
             word_sort = word_sort.replace(i," ")
     #word_sort= sorted(word_sort, key=lambda L: (L.lower(), L))
     word_sort= " ".join(sorted(word_sort, key=lambda L: (L.lower(), L))) #takes string and sorts by length giving priority to upper over lower when tied
     sorted_word = " 1a " #left for testing
     sorted_word = re.sub("\S+\d\S+", "", word_sort).strip() #removes any word with a number in it
     sorted_word = "".join(sorted_word) #joins the results back into a string
     return sorted_word




def int_sort(in_list):
    in_list = " ".join(in_list[1:]) # takes information from argv and creates a string with it
    int_sort = " ".join(list(reversed(re.findall(r"(?<!\S)\d+(?!\S)", in_list))))
    # find all looks for a pattern of anything but a space... any number. anything besides a space in the in_list and returns it
    #reveresd flips that return backwards
    # list turns that into a list and join makes it a string again
    return int_sort

#print int_sort(in_list)

#print (delim(in_list))


推荐答案

您的 ifw 函数没有return语句,因此它返回 None

Your ifw function has no return statement, so it returns None.

所以这行:

x = ','.join(str(x) for x in (ifw(in_list)))

成为

x = ','.join(str(x) for x in None)

并且python无法遍历None。

and python can't iterate over None.

这篇关于TypeError:只能加入可迭代的python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆