TypeError:只能加入一个迭代python

问题描述:

我试图将分隔符插入由前一个函数(ifw(in_list))创建的字符串中。我对\ n或\ t没有任何问题,但是一旦我的代码达到“,”加入它就会崩溃。我已经尝试了几种不同的解决方案,并在网站上查看类似的问题/答案,但我一直得到TypeError:只能加入一个迭代器。你可以提供给我的任何帮助将非常有用。TypeError:只能加入一个迭代python

#! /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)) 
+2

显示你的'ifw'函数 –

+2

为什么你的代码处理COMMA与其他人差别很大? –

+0

或者,如果逗号是问题,我不明白为什么你需要'str(x)for x in'部分。 –

ifw函数没有返回语句,所以它返回None

因此该行:

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

成为

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

和Python不能在无迭代。

+0

所以当OP说“我对\ n或\ t没有任何问题”时,他们错了,我猜? –