【问题标题】:exceptions in python 3python 3中的异常
【发布时间】:2014-03-30 18:14:45
【问题描述】:

如果输入了与菜单无关的数字,我试图让我的代码引发异常错误。目前我的程序刚刚终止。

import os
mainfile = open('grades.txt', 'a')
def main():
    choice = 1
    try:
        while choice >= 1 and choice <= 3:
            display_menu()
            choice = int(input('Please enter a number 1- 3 : '))
            if choice == 1:
                student_entry()
            elif choice == 2:
                student_read()
            elif choice == 3:
                quit_choice()
    except ValueError:
        print('an error has occurred\n')
        return main()
    except:
        print(' An error occurred')
        return main()

def display_menu():
    print()
    print('Press 1 to enter student information\n')
    print('Press 2 to read student information\n')
    print('Press 3 to exit program\n')

main()

当输入 1-3 范围之外的数字时,如何让它引发异常?我尝试了一些不同的东西,但仍然没有弄清楚。我可以编写另一个 while 语句或添加一些 elif 语句来处理它,但我实际上需要引发异常/错误。

【问题讨论】:

  • raise ValueErrorIt's all in docs.PS。您应该始终以else 结束if... elif...,以确保您处理所有情况。
  • 顺便说一句,那些return 语句是递归的,我不认为那是你真正想要的。
  • 递归是什么意思?我的印象是我需要声明才能返回主函数?
  • except: 从不使用裸except。指定要捕获的异常。就目前而言,您的代码甚至可以捕获您可能不想想要捕获的KeyboardInterrupt
  • @m.wasowski 注意到,感谢您的意见

标签: python exception python-3.x syntax


【解决方案1】:

只需使用raise 语句,旨在引发自己的异常。

演示:

if num not in (1, 2, 3):
    raise ValueError

理想情况下,这会在您尝试对输入进行任何其他操作之前进行。

【讨论】:

  • 取而代之的是,OP 可以添加一个 else 语句,因为他已经在测试这三个中的任何一个。
  • @SukritKalra 这是正确的,或者最好在他做任何其他事情之前添加if 语句。那将是最好的方法。
  • 谢谢,我在发帖后回答了自己的问题,我使用了 else 语句来引发错误。
  • @krona 如果我的回答对你有帮助,你能接受吗?
  • 并非如此。检查三个条件并不是那么昂贵,而且在我看来代码看起来更好,更易读。
猜你喜欢
  • 2017-06-09
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 2017-05-26
相关资源
最近更新 更多