我试图弄清楚为什么在我出现错误时继续无效:
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
你能指出我的错误吗?
答案 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