将逻辑测试转换为try语句(python3)

时间:2015-11-29 12:37:37

标签: python python-3.x

我一直在尝试将一些代码转换为try语句,但我似乎无法正常工作。

这是伪代码中的代码:

start
run function

check for user input ('Would you like to test another variable? (y/n) ')

if: yes ('y') restart from top 
elif: no ('n') exit program (loop is at end of program)
else: return an error saying that the input is invalid.

这是我在python 3.4中的代码(可以工作)

run = True
while run == True:

    spuriousCorrelate(directory)

    cont = True

    while cont == True:
        choice = input('Would you like to test another variable? (y/n) ')
        if choice == 'y':
            cont = False
        elif choice == 'n':
            run = False
            cont = False
        else:
            print('This is not a valid answer please try again.')
            run = True
            cont = True

现在,将这个转换为try语句或者稍微改掉我的代码的正确方法是什么?

这不是所提到的引用帖子的副本,因为我试图管理两个嵌套语句,而不是只得到正确的答案。

2 个答案:

答案 0 :(得分:1)

如果你想让你的代码更整洁,你应该考虑

while run:

而不是

while run == True:

并删除最后两行,因为再次将runcont设置为True是不必要的(它们的值没有改变)。

此外,我认为try - except块在整数输入的情况下很有用,例如:

num = input("Please enter an integer: ")
try:
    num = int(num)
except ValueError:
    print("Error,", num, "is not a number.")

在你的情况下,虽然我认为坚持使用if - elif - else块会更好。

答案 1 :(得分:0)

  

好的,作为一般情况,我会尽量避免尝试......除了块

不要这样做。使用正确的工具完成工作。

使用raise表示您的代码无法(或不应该)处理该方案。
使用try-except处理信号

  

现在,将此转换为try语句的正确方法是什么?

不要转换。
您的代码中没有raise的任何内容,因此try-except没有任何意义。

  

在某种程度上改变我的代码的正确方法是什么?

摆脱你的旗帜变量(runcont)。你有break,使用它!
正如Python文档所说,这是传递do-while的首选方式;不幸的是,我现在无法找到它链接它。
如果有人找到它,请随时编辑我的答案以包含它。

def main()
    while True: # while user wants to test variables
        spuriousCorrelate(directory) # or whatever your program is doing
        while True: # while not received valid answer
            choice = input('Would you like to test another variable? (y/n) ')
            if choice == 'y':
                break  # let's test next variable
            elif choice == 'n':
                return # no more testing, exit whole program
            else:
                print('This is not a valid answer please try again.')