2016-11-21 9 views
0

環境変数を"PERIOD"に対応するように設定しました。次のエラーが表示されます。目標は、コードがenv変数に応答し、それらを使用してユーザーが送信したデータセットの区切り文字をトリガーすることです。.joinのステートメントの型エラー

Traceback (most recent call last): 
File "./qwikifwlistmgr", line 103, in <module> 
    delim(in_list) 
File "./qwikifwlistmgr", line 94, in delim 
    e = ".".join(e) 
TypeError 

私はすべての声明に返事があることを確認しました。しかし今、私は他に何が間違っているのか分かりません。私は何かシンプルな感じを得るが、私はそれを見ることができない。

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


in_list = sys.argv 



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)) 
    else: 
     return 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 


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): 
    int_sort = "3" 
    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 

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

'join()'で使う前に 'e'をチェックしてください。 'print(type(e))'または少なくとも 'print(e)' – furas

答えて

1

問題は、他のすべてのBRANCHEがelse支店以外取られた場合Noneを返すifw関数からです。だから、次の式はeになし値を評価し、割り当てます

e = ifw(in_list) 
... 
e = ".".join(e) 

あなたは機能のデフォルトのアクションとして、空の反復可能を返すことによってこの問題を解決することができます:

def ifw(in_list): 
    if usr_choice == 'i': 
     ... 
    else: 
     return in_list 
    return [] 

またはapproriateリストを返すにif/elif

関連する問題