我将如何定义一个其中有一个while循环和一个try-except循环的函数?
Posted
技术标签:
【中文标题】我将如何定义一个其中有一个while循环和一个try-except循环的函数?【英文标题】:How would I go about defining a function which has a while loop within it and a try-except loop within that? 【发布时间】:2022-01-06 12:53:40 【问题描述】:我正在尝试创建一个可重复的函数,该函数使用 while 循环重复尝试 try-except 循环,但我在某些部分遇到了问题。 这是我当前的功能:
def trytrytryagain(input):
ValueError
while ValueError:
try:
input() = int(input())
except ValueError:
print("You must enter a number")
input = int(input())
当我运行代码并输入“a”(以测试它是否反复要求用户输入数字)时,它总是在第一次迭代后显示此错误消息。
Traceback (most recent call last):
File "main.py", line 7, in trytrytryagain
int(input())
ValueError: invalid literal for int() with base 10: 'a'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 16, in <module>
trytrytryagain (times_table)
File "main.py", line 10, in trytrytryagain
int(input())
ValueError: invalid literal for int() with base 10: 'a'
因此,我发现创建此功能非常困难。它意味着一直运行直到用户输入一个数字,并在每次迭代后显示消息“您必须输入一个数字”。我完全糊涂了,所以这是上下文的完整代码(它是一个时间表生成器)。
from time import sleep
def trytrytryagain(input):
ValueError
while ValueError:
try:
int(input())
except ValueError:
print("You must enter a number")
int(input())
print("Please input the times table you wish to complete (1, 2, 3, etc.).")
times_table = input
trytrytryagain (times_table)
print("Would you like to go up to another times table (do the 1 to 12 times tables)? yes/no")
try:
othertables = str(input()).lower()
except ValueError:
print("You must enter either yes or no")
othertables = str(input()).lower()
if othertables == "yes":
print("Enter which time table you want to go up to.")
try:
other_times_table = int(input())
except ValueError:
print("You must enter a number")
other_times_table = int(input())
print("Enter the maximum table you would like to go up to. (if you do the 3 to 5 times tables, what times table would you like to finish on - type 12 for 5 x 12, 13 for 5 x 13, etc.)")
try:
max_value = int(input())
except ValueError:
print("You must enter a number")
max_value = int(input())
for x2 in range(times_table, other_times_table + 1):
for x in range(max_value + 1):
print(f"x x x2 =")
input()
sleep(0.1)
else:
print("Okay.")
print("Enter the maximum table you would like to go up to. (if you do the 3 to 5 times tables, what times table would you like to finish on (type 12 for 5 x 12, etc.))")
try:
max_value = int(input())
except ValueError:
print("You must enter a number")
max_value = int(input())
for x in range(times_table, max_value + 1):
answer = x * times_table
print(f"x times times_table is answer")
sleep(0.1)
【问题讨论】:
在您的第一个示例中,错误位于 `int(input())` 行...但该行不在示例中。最好发布一个完全运行的测试脚本(包括对 trytrytryagain 的调用),以便我们可以运行它并看到相同的错误。就像你在第二个例子中所做的那样。 【参考方案1】:您可以使这变得更简单,只需捕获和忽略错误并循环直到没有异常:
def trytrytryagain():
while True:
try:
print("You must enter a number")
return int(input())
except ValueError:
pass
print("You entered:", trytrytryagain())
【讨论】:
已记录并更新。【参考方案2】:这是因为您在异常处理中调用了input
函数。
在第一个输入上捕获到异常,但在第二个输入上,我们在处理程序内部,没有任何东西捕获它。
如果你必须使用异常,试试这个:
while True:
try:
print("Please enter a number")
var = int(input())
break
except ValueError:
pass
【讨论】:
【参考方案3】:你可以这样使用:
def function():
while True:
try:
return int(input())
except ValueError:
print("You must enter a number")
input_value = function()
print(input_value)
【讨论】:
【参考方案4】:这里有一个小功能可以帮到你:
def getInput(prompt, t=str):
while True:
v = input(f'prompt: ')
try:
return t(v)
except ValueError:
print('Invalid input', file=sys.stderr)
用法示例:
S = getInput('输入任意字符串') # 这将返回一个字符串 I = getInput('Enter an integer', int) # 这将返回一个 int F = getInput('Enter a float', float) # 这将返回一个浮点数
当然,第二个参数可以是任何以字符串为输入并进行某种处理的函数
【讨论】:
以上是关于我将如何定义一个其中有一个while循环和一个try-except循环的函数?的主要内容,如果未能解决你的问题,请参考以下文章