<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def sget_voltage(self, cycle, step, set_number=None):
 """Returns voltage for cycle, step. Convinience function; same as issuing dfdata[(dfdata[cycle_index_header] == cycle) & (dfdata[step_index_header] == step)][voltage_header] Args: cycle: cycle number step: step number set_number: the dataset number (automatic selection if None) Returns: pandas.Series or None if empty """


        time_00 = time.time()
        set_number = self._validate_dataset_number(set_number)
        if set_number is None:
            self._report_empty_dataset()
            return
        cycle_index_header = self.headers_normal.cycle_index_txt
        voltage_header = self.headers_normal.voltage_txt
        step_index_header = self.headers_normal.step_index_txt
        test = self.datasets[set_number].dfdata

        if isinstance(step, (list, tuple)):
            warnings.warn(f"The varialbe step is a list."
                          f"Should be an integer."
                          f"{step}")
            step = step[0]

        c = test[(test[cycle_index_header] == cycle) &
                 (test[step_index_header] == step)]

        self.logger.debug(f"(dt: {(time.time() - time_00):4.2f}s)")
        if not self.is_empty(c):
            v = c[voltage_header]
            return v
        else:
            return None