我如何修复员工时间表上的“除尝试之外”错误?

2024-04-19 18:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序的功能正确,但我必须添加错误检查,现在我遇到了一个问题。问题是,如果您为工人名称键入一个数字,那么在接下来键入一个名称时,一旦您遍历所有输入字段,它就会打印出“生产工人信息”两次。我该如何解决这个问题

整个计划:

class Employee(object):

    def __init__(self, name, id_number):
        self.id_number = id_number
        self.name = name

class Worker(Employee):

    def __init__(self, name, id_number, shift_number, pay_rate):
        #call superclass __init__ method
        Employee.__init__(self, name, id_number)
        #initialize shift_number and pay_rate attributes
        self.shift_number = shift_number
        self.pay_rate = pay_rate


def main():
    #variables
    worker_name= " "
    worker_id = " "
    worker_shift = 0
    worker_pay = 0.00

    #get data attributes

    while 1:
        try:
            worker_name = input("Enter the worker name: ")
            print()
            if not worker_name.isalpha():
                print("Only letters are allowed!")
                print()
                main()
                break
            worker_id = int(input("Enter the ID number: "))
            print()
            worker_shift = int(input("Enter the shift number: "))
            print()
            worker_pay = float(input("Enter the hourly pay rate: "))
            print()
            break
        except Exception as e:
            print("Invalid choice! try again! " + str(e))
            print()
            
    #create an instance of Worker
    Employee.worker = worker_name, worker_id, worker_shift, worker_pay
    if not worker_name.isalpha():
        pass
    #display information
    print ("Production worker information ")
    print("---------------------------------")
    print()
    print ("Name: ", worker_name)
    print()
    print ("ID number: ", worker_id)
    print()
    print ("Shift: ", worker_shift)
    print()
    print ("Hourly Pay Rate: $ " + format(worker_pay, ",.2f"))

main()

3条回答

您正在递归调用main(),而不是允许while 1:循环工作

我想你的意思是:

            if not worker_name.isalpha():
                print("Only letters are allowed!")
                print()
                continue

continue将跳回while 1:

如果输入失败,使用循环重试输入(而不是递归调用)。您还可以利用try/catch将代码缩短一点,只需try完成创建worker所需的全部工作,然后您就不需要每次单独声明和检查每个变量

class Employee:
    def __init__(self, name: str, id_number: int):
        assert name.isalpha(), "Only letters are allowed in employee names!"
        self.id_number = id_number
        self.name = name


class Worker(Employee):
    def __init__(
        self,
        name: str,
        id_number: int,
        shift_number: int,
        pay_rate: float
    ):
        # call superclass __init__ method
        Employee.__init__(self, name, id_number)
        # initialize shift_number and pay_rate attributes
        self.shift_number = shift_number
        self.pay_rate = pay_rate


def main():
    # create an instance of Worker
    while True:
        try:
            name = input("\nEnter the worker name: ")
            assert name.isalpha(), "Only letters are allowed!"  # fail fast!
            worker = Worker(
                name,
                int(input("\nEnter the ID number: ")),
                int(input("\nEnter the shift number: ")),
                float(input("\nEnter the hourly pay rate: "))
            )
            break
        except Exception as e:
            print(f"Invalid choice! try again! {e}\n")

    # display information
    print(f"""
Production worker information
                -

Name: {worker.name}

ID number: {worker.id_number}

Shift: {worker.shift_number}

"Hourly Pay Rate: ${worker.pay_rate:.2f}
""")


main()

您不应该再次调用自身内部的main(),请使用try/except系统

def main():
    #variables
    worker_name, worker_id, worker_shift,worker_pay = "", "", 0, 0

    while True:
        try:
            worker_name = input("Enter the worker name: ")
            if not worker_name.isalpha():
                print("\nOnly letters are allowed!")
                continue

            worker_id = int(input("\nEnter the ID number: "))
            worker_shift = int(input("\nEnter the shift number: "))
            worker_pay = float(input("\nEnter the hourly pay rate: "))
            break
        except Exception as e:
            print("Invalid choice! try again! " + str(e), "\n")
            

相关问题 更多 >