Build a Salary Tracker - Step 39

Tell us what’s happening:

Build a Salary Tracker - Step 39 :

I need help with Step 39, I can’t seem to get it right

I get an error:" You should have a second if statement in your salary setter."

Your code so far

class Employee:
    _base_salaries = {
        'trainee': 1000,
        'junior': 2000,
        'mid-level': 3000,
        'senior': 4000,
    }

    def __init__(self, name, level):
        self.name = name
        self.level = level
        self.salary = Employee._base_salaries[level]

    def __str__(self):
        return f'{self.name}: {self.level}'

    def __repr__(self):
        return f"Employee('{self.name}', '{self.level}')"

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, new_name):
        if not isinstance(new_name, str):
            raise TypeError("'name' must be a string.")
        self._name = new_name
        print(f"'name' updated to '{self.name}'.")

    @property
    def level(self):
        return self._level

    @level.setter
    def level(self, new_level):
        if not isinstance(new_level, str):
            raise TypeError("'level' must be a string.")
        if new_level not in Employee._base_salaries:
            raise ValueError(f"Invalid value '{new_level}' for 'level' attribute.")
        if hasattr(self, '_level') and new_level == self.level:
            raise ValueError(f"'{self.level}' is already the selected level.")
        if hasattr(self, '_level') and Employee._base_salaries[new_level] < Employee._base_salaries[self.level]:
            raise ValueError("Cannot change to lower level.")
        print(f"'{self.name}' promoted to '{new_level}'.")
        self.salary = Employee._base_salaries[new_level]
        self._level = new_level

    @property
    def salary(self):
        return self._salary

    @salary.setter
    def salary(self, new_salary):
        if not isinstance(new_salary, (int, float)):
            raise TypeError("'salary' must be a number.")

# User Editable Region


        if hasattr(self, '_level') and new_salary < self._base_salaries[self.level]:

# User Editable Region

            raise ValueError(
        f"Salary must be higher than minimum salary ${self._base_salaries[self.level]}")  

        self._salary = new_salary
        print(f'Salary updated to ${self.salary}.')

charlie_brown = Employee('Charlie Brown', 'trainee')
print(charlie_brown)
print(f'Base salary: ${charlie_brown.salary}')
#charlie_brown.level = 'trainee'
charlie_brown.salary = 111

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36

Challenge Information:

Build a Salary Tracker - Step 39

Hi @jele,

Is this how you accessed _base_salaries in code you wrote previously?

Happy coding!

I’m lost, I did this first:

…raise a ValueError with the message Salary must be higher than minimum salary $ followed by the base salary for the current level and a period.

Please review this instruction again carefully. Your message is missing something.

But before making that correction, please reset this step to restore the starting code since it seems you may have inadvertently changed something there, which will cause the tests to fail.

I fixed it, Thank you.