Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在函数中运行try和except并重新运行会导致非类型返回。我该如何解决这个问题?_Python_Function_Try Catch - Fatal编程技术网

Python 在函数中运行try和except并重新运行会导致非类型返回。我该如何解决这个问题?

Python 在函数中运行try和except并重新运行会导致非类型返回。我该如何解决这个问题?,python,function,try-catch,Python,Function,Try Catch,我正在开发一个简单的程序,允许用户在掷硬币时下注一些虚拟货币。一切正常,但用户输入错误时除外。例如:如果一个问题要求回答y/n,而用户将“d”或其他内容作为回答,程序将使用except ValueError并重新运行该函数。但是,当函数重新运行并且用户最终正确输入某些内容时,将导致进一步的错误 Error: > AttributeError: 'NoneType' object has no attribute 'lower' 代码: .lower()仅在字符串上运行,使用input

我正在开发一个简单的程序,允许用户在掷硬币时下注一些虚拟货币。一切正常,但用户输入错误时除外。

例如:如果一个问题要求回答y/n,而用户将“d”或其他内容作为回答,程序将使用except ValueError并重新运行该函数。但是,当函数重新运行并且用户最终正确输入某些内容时,将导致进一步的错误

Error: 

> AttributeError: 'NoneType' object has no attribute 'lower'
代码:

.lower()仅在字符串上运行,使用input()定义变量使其不注册为字符串。相反,试试这样的方法

def set_choice():
    choice = input("Want to bet on a coin toss?", 'y','n')
def choice():
    choice = set_choice()
    return choice
choice = choice.lower()
调试提示: 每次打印选择,这样你就可以看到为什么它会崩溃!您可以稍后将打印对账单取出

我发现的是:
get\u choice()
未返回任何值。
在get_选项中,如果输入无效,它实际上不会返回任何内容。哦,不!因此,您将返回None,对None调用.lower()将抛出异常

解决方案:
如果输入无效,则第二次运行get_choice时,您处于正确的轨道上。一个小小的调整:不只是运行get_choice,而是返回get_choice

get_bet()中也有类似的错误,只是一个提示,您可以用相同的方法解决它


总的来说,这场比赛很棒。

我不确定这是真的。输入函数返回一个字符串。另外,您的示例也不太有效,因为输入只接受一个参数。@JamesHuang您设置了一个函数来运行输入,另一个函数来返回选项,我更新了我的答案。
def set_choice():
    choice = input("Want to bet on a coin toss?", 'y','n')
def choice():
    choice = set_choice()
    return choice
choice = choice.lower()