Skip to main content
 首页 » 编程设计

python之TypeError:只能加入一个可迭代的python

2025年05月04日28xxx_UU

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

#! /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。

所以行:

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

成为

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

并且 python 不能遍历 None。