локальная переменная «транспортное средство», на которую ссылались до возникновения ошибки назначения, несмотря на то, что я назначил список переменной «транспортное средство» непосредственно перед этим?

#python #local-variables

Вопрос:

У меня есть этот код, в котором встречается ошибка: локальная переменная «транспортное средство», на которую ссылаются перед назначением. Но когда я просматриваю свой код ниже, я назначил список переменной транспортного средства в if elif операторе , до того, как «транспортное средство» будет добавлено в список транспортных средств. Что здесь могло пойти не так?

 def populate_vehicles(self, vehicle_file):

  empty_str = ''

  vehicle_str = vehicle_file.readline()
  vehicle_info = vehicle_str.rstrip().split(',')
  file_header_found = vehicle_info
  vehicle_str = vehicle_file.readline()

  while vehicle_str != empty_str:
      vehicle_info = vehicle_str.rstrip().split(',')
      if vehicle_str == '#CARS#' or vehicle_str == '#VANS#' or vehicle_str == '#TRUCKS#':
          file_header_found = vehicle_str

      else:
          if file_header_found == '#CARS#':
              vehicle = Car(*vehicle_info)


          elif file_header_found == '#VANS#':
              vehicle = Van(*vehicle_info)    

          elif file_header_found == '#TRUCKS#':
              vehicle = Truck(*vehicle_info)

      self.vehicles.add_vehicle(vehicle)

      vehicle_str = vehicle_file.readline()
 

Комментарии:

1. Возможно, ни одно из if...elif утверждений не оценивается True , и тогда вы делаете self.vehicles.add_vehicle(vehicle) то, на что ссылаетесь. Попробуйте print(file_header_found) и проверьте, каков результат

2. else: В if elif цепочке / нет. Если header_found он не соответствует ни одной из трех строк, с которыми вы его сравниваете, то vehicle будет неопределенным, как и сказал вам Python. Итак, добавьте else: и назначьте что-то vehicle (или, в качестве альтернативы, выдайте ошибку).

Ответ №1:

Если вы войдете в если, транспортное средство не будет установлено.

Когда вы ссылаетесь на транспортное средство во 2-й и последней строке в этом случае, оно не будет создано.