交换时为什么会出现错误
try:
hrs=float(hrs)
rate=float(rate):
到
if hrs=float(hrs) and rate=float(rate):
换句话说:
and
try
代替if
,(如果可以的话,那不会使try
多余吗?)代码:
hrs = raw_input('how many hours do you work per week:')
rate = raw_input('what is your rate per hour?:')
#try:
#hrs=float(hrs)
#rate=float(rate)
if (hrs == float(hrs) and rate == float(rate)):
if (hrs > 40.0):
pay=2*hrs*rate
print ('your weekly salary is: %0.2f') %pay
else:
pay = hrs*rate
print('your weekly salary is: %0.2f') %pay
else:
#except:
print('enter a number, yo')
答案 0 :(得分:2)
3)如果
你不能交换尝试
是那个。 try
和if
执行完全不同的工作,语法完全不同。它们不可互换。
try
用于处理异常。 try
下的代码块无条件运行。如果在该代码块中抛出异常,并且异常类型与except
块之一匹配,则异常停止传播,并运行关联的except
块来处理异常。
if
用于决定是否根据条件做一件事或另一件事。评估if
上的表达式,如果表达式具有真值,则执行if
下的代码块。否则,执行else
下的块。
异常和真/假条件完全不同。
答案 1 :(得分:2)
其他人已经通过=
vs ==
来解决这个问题。
但值得一提的是,python严重依赖缩进来创造意义。行if hrs>40.0:
应缩进。您的第一个else
语句没有与您当前存在的程序相对应的if
。
答案 2 :(得分:0)
=是赋值运算符。
因此,在试用案例中,您的代码确认您确实可以设置' hrs'到浮点值(小时),它运行得很好。
但是hrs = float(hrs)不是bool,所以不能在if语句中使用。
hrs == float(hrs)
会在适当的时候给你一个真或假,并且可以在if语句中使用。
答案 3 :(得分:0)
假设用户输入有效代表两个浮点数的文本。然后if
语句失败:由于raw_input
返回一个字符串,hrs
最初绑定到一个字符串。在if
语句中,float
函数返回一个数字(当然是浮点数);表达式hrs == float(hrs)
引发异常,因为您试图将数字与字符串进行比较。
假设用户输入了一些不能转换为浮点数的文本。现在if
语句由于其他原因而失败:float
函数在无法转换字符串时引发异常。这意味着浮点函数不会返回,因此从不尝试==比较。在这两种情况下,您都没有看到错误消息。
在注释掉的try:除了程序版本之外,try:block中抛出异常,因此异常处理程序运行,并打印错误消息。
你想要的是这样的东西(使用try:except:else:
的好例子)
str_hrs = raw_input('how many hours do you work per week:')
str_rate = raw_input('what is your rate per hour?:')
try:
hrs = float(str_hrs)
rate = float(str_rate)
except:
print('enter a number, yo')
else:
if (hrs > 40.0):
pay=2*hrs*rate
print ('your weekly salary is: %0.2f') %pay
else:
pay = hrs*rate
print('your weekly salary is: %0.2f') %pay