Python 3异常:TypeError:函数缺少1个必需的位置参数:';单词';

Python 3异常:TypeError:函数缺少1个必需的位置参数:';单词';,python,function,exception,arguments,try-catch,Python,Function,Exception,Arguments,Try Catch,我的函数需要一个参数字,但如果没有参数,我希望程序不会崩溃 def get_count(words): try: consonants_str = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" vowels_str = "aeiouAEIOU" consonants_ls = [] vowels_ls = [] words_ls = [] resul

我的函数需要一个参数字,但如果没有参数,我希望程序不会崩溃

def get_count(words):
    try:
        consonants_str = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
        vowels_str = "aeiouAEIOU"
        consonants_ls = []
        vowels_ls = []
        words_ls = []
        result = {"vowels": 0, "consonants": 0}`

        for element in consonants_str:
            consonants_ls.append(element)

        for element in vowels_str:
            vowels_ls.append(element)

        if type(words) != type(None):
            for element in words:
                words_ls.append(element)

            for element in words_ls:
                if element in vowels_ls:
                    result["vowels"] += 1
                if element in consonants_ls:
                    result["consonants"] += 1
                else:
                    continue
            else:
                result["vowels"] = 0
                result["consonants"] = 0

    except TypeError:
        result["vowels"] = 0
        result["consonants"] = 0

    answer = {"vowels": result["vowels"],"consonants": result["consonants"]}

    return answer`
如果我用

print(get_count())
我希望程序不会显示标题中的错误。例外情况应该出现在
get_count
def
中,因为它应该是一个关闭的文件。我不在同一个文件中执行,因此异常应该独立于其他文件

我希望你明白我的意思

谢谢你的回答!
NoAbL

当您声明要使用
def(words)
调用名为
words
的参数时,您不是在向函数传递参数,请像这样调用函数或使用所需的任何字符串输入

print(get_count('AAAABBBKDKDKDKDA'))
如果希望程序在未传递任何参数时退出,请执行此操作(记住单词现在是元组)

肾盂道:

>>> vowels = 'aeiou'
>>> def get_count(words):
...     words = words.lower()
...     total_vowels = sum(words.count(x) for x in vowels)
...     return {'vowels':total_vowels, 'consonants':len(words)-total_vowels}
... 
>>> get_count('AAAABBBKDKDKDKDA')
{'consonants': 11, 'vowels': 5}
使用集合。计数器:

>>> def get_count(words):
...     words = words.lower()
...     my_counter = collections.Counter(words)
...     total_vowels = sum(my_counter.get(x,0) for x in 'aeiou')
...     return {'vowels':total_vowels, 'consonants':len(words)-total_vowels}
... 
>>> get_count('AAAABBBKDKDKDKDA')
{'consonants': 11, 'vowels': 5}

您可以使用可选参数

例如:

def info(name, age=10):
是一个具有可选参数
age
的函数

有效的信息调用包括:

info("Roy")
info("Roy", 15)
在您的情况下,您只需将功能更改为:

def get_count(words=[]): # Assuming words is a list. If it is a string you can use words=""
因此,如果不传递任何参数,默认情况下,函数将
单词
作为空的
列表

奖金:

我找到了

for element in consonants_str:
    consonants_ls.append(element)

for element in vowels_str:
    vowels_ls.append(element)
你不需要这个。相反,您可以这样做:

consonants_ls = list(consonants_str)
vowels_ls = list(vowels_str)

我知道,如果我不传递参数,我需要一个转义序列或类似的东西。use
def get_count(*args)
args是一个元组,它允许你不传递任何参数或传递任何数量的未命名参数。你可以使用任何名称,如
*可选
,但社区使用的是
*args
,就我个人而言,我从未见过任何使用不同名称的标准代码。但重要的是,您必须了解python在这方面允许的自由度如果我将
def get_count(words)
更改为
def get_count(*words)
,输出总是
{“辅音”:0,“元音”:0}
,因为单词不再是字符串,而是包含字符串的元组,因此,对于words[0]中的元素应该是
,如果您只关心传递的第一个字符串(可以将多个字符串传递到函数中),那么它现在就可以工作了。很抱歉,我不能把绿钩给两个人,所以我把它给了第一个回答的人,他帮了我很多。这并不意味着其他答案不那么好。
consonants_ls = list(consonants_str)
vowels_ls = list(vowels_str)