为什么继续在提出错误时不起作用

时间:2016-09-11 03:22:27

标签: python

我试图弄清楚为什么在我出现错误时继续无效:

while True:
        a = int(raw_input('Type integer with 9 numbers '))
        if len(str(a)) < 9 or len(str(a)) >9:
                raise NameError('Wrong Number. Try again...')
                continue
        if not istance(a, int):
                raise ValueError("Oops!  That was no valid number.  Try again...")
                continue
        else:
                print a
                break

你能指出我的错误吗?

2 个答案:

答案 0 :(得分:3)

尝试使用print 'Wrong Number. Try again...'代替raise

raise将触发异常,这基本上意味着您的程序在到达指令时被中断,异常会在调用堆栈中向上传播,直到它被try...except语句捕获。

您似乎在此处实现的是向用户显示错误消息,因为输入不正确。为此目的,只需使用print语句即可。

答案 1 :(得分:1)

describe DdModule::DbConnn do let!(:db_conn) do DbModule::DbConn.new("hostname", "instance", "port", "user", "pass") end describe '#close_conn' do it 'closes the db connection' do expect {db_conn.close_conn}.to change(db_conn, :is_conn?).from(true).to(false) end end end 将触发异常,程序将终止。

我在你的代码中发现了一些矛盾:

  

您正在将用户输入转换为int类,因此raise根本不需要if isinstance(a, int),因为a已经指向了int类。如果用户输入无法转换为“int”,那么将引发ValueError异常并且程序执行将在那里结束,因此不会对第一个if ...语句的事件进行评估。

我会在几乎没有变化的情况下重写代码:

while True:
    try:
        a = int(raw_input('Type integer with 9 numbers '))
    except ValueError:
        print "Non-numeric chars were entered"
        continue
    if len(str(a)) != 9:
        print "Wrong number"
        continue
    else:
        #do whatever you wanna do
        print 'You entered nine digits...hurray'
        break