Python 计算加班费时,以下哪一项更好?

Python 计算加班费时,以下哪一项更好?,python,python-3.x,Python,Python 3.x,我想有人解释一下这两种方法在解决这个问题上有什么不同,哪一种更好 使用try和except重写您的支付程序,以便 该程序通过打印一条消息和 退出程序。以下显示了程序的两次执行: Enter Hours: 20 Enter Rate : nine Error, please enter numeric input Enter Hours: forty Error, please enter numeric input 或 这些方法之间的主要区别在于,是在所有代码周围都有一个try-catch块

我想有人解释一下这两种方法在解决这个问题上有什么不同,哪一种更好

使用try和except重写您的支付程序,以便 该程序通过打印一条消息和 退出程序。以下显示了程序的两次执行:

Enter Hours: 20
Enter Rate : nine
Error, please enter numeric input

Enter Hours: forty
Error, please enter numeric input


这些方法之间的主要区别在于,是在所有代码周围都有一个try-catch块,还是在错误检查周围只有一个try-catch块。 首先,第一种方法将错误检查拆分为多个try-except块,而第二种方法将整个代码块拆分为一个try-except块。其次,第一个使用quit函数跳过代码的计算部分,而第二个使用try块中的函数跳过代码的计算部分

我要说的是,第二种方法更干净,更容易阅读。首先,除了块,您只有一次尝试,这减少了冗余代码的数量。 其次,当您跳过代码时,将代码全部放在try-except块中,而不是让程序退出,这样更容易看到发生了什么。
最后,第二段代码比较短,不那么凌乱,对我来说更像是标准实践。

让我们分别称它们为way1和way2

在方式1中,您在每次输入后检查值错误,但在方式2中,您在检查任何错误。在这种情况下,它很可能是代码片段后的值错误

Way1在每次输入后检查错误,way2整体检查错误。在python中,如果出现任何错误,编译器将停止并抛出错误

假设由于人为错误,您将得到一个属性错误,way2将打印:

错误,请输入数字

但是,way1将给您一个错误,并且代码停止工作,您必须重新运行它

现在让我们讨论一下空间和时间的复杂性,这两个代码都具有相同的复杂性

如果其他人想理解您的代码,在您无法联系的情况下,他/她会很容易理解way2代码片段,因为它更清晰、更易于阅读


在first Try语句中有重复的代码。有两个Try-and-except处理每个用户输入的错误,而在第二个代码块中只有一个。“不要重复自己”这个枯燥的原则指出,逻辑中的重复应该通过抽象来消除。向代码库添加额外的、不必要的代码会增加将来扩展和维护软件所需的工作量。
第二个Try语句看起来更清晰、更容易阅读,是首选的逻辑方法。

这个问题可能更适合于。
input_hours = input('Enter Hours: ')
try:
    hours = float(input_hours)              
except ValueError:
    print('Error, please enter numeric input')
    quit()
input_rate = input('Enter Rate: ')
try:
    rate = float(input_rate)                
except ValueError:
    print('Error, please enter numeric input')
    quit()
if hours < 40:
    pay = rate * hours                      
else:
    overtime = hours - 40                   
    pay = (rate * 40.0) + (1.5 * rate * overtime)
print(pay)
try:
    hrs = input('Enter Hours: ')
    hr = float(hrs)
    rate = input('Enter Rate: ')
    rt = float(rate)
    if float(hr) <= 40:
        print(hr * rt)
    else:
        hrr = hr - 40
        rr = hrr * 1.5 * rt
        print(40 * rt + rr)
except:
    print('Error, please enter numeric input')