Что я могу сделать неправильно, что Panda3D не будет правильно импортировать ShowBase?

Исключения не должны использоваться для проверки. В основном вы не должны проходить стек для проверки в целом.

Что вы в основном делаете:

X - это верхний уровень и может обрабатывать все. X вызывает Y. Y вызывает Z. Z выполняет проверки и делает что-то после этого, создавая исключение, если проверка не удалась.

Что вы должны делать:

X вызывает Y. Y вызывает V и X. V выполняет проверки и возвращает результат на основании того, была ли вещь действительной. Y не может вызвать X, если V сказал, что вещь недействительна. Y распространяет недействительность или успешный результат на X. X делает то, что он сделал бы с if / else в отношении действительности, а не rescue.


Но скажем, вы действительно хочу это сделать. Вместо этого вы должны использовать throw / catch:

def validate_date(date)
  errors = []

  errors << 'Improper format' unless date.match?(/^\d{2}-\d{2}-\d{4}$/)
  errors << 'Invalid day' unless date.match?(/^[0-3]\d/)
  errors << 'Invalid month' unless date.match?(/-[12]\d-/)
  errors << 'Invalid year' unless date.match?(/[12][90]\d{2}$/)

  throw(:validation, errors) unless errors.empty?
end

def invoke_validation_and_do_stuff(date)
  validate_date(date)
  puts "I won't be called unless validation is successful for #{date}"
end

def meaningless_nesting(date)
  invoke_validation_and_do_stuff(date)
end

def more_meaningless_nesting(date)
  meaningless_nesting(date)
end

def top_level(date)
  validation_errors = catch(:validation) do
    more_meaningless_nesting(date)
    nil
  end

  if validation_errors
    puts validation_errors
  else
    puts 'Execution successful without errors'
  end
end


top_level '20-10-2012'
  # I won't be called unless validation is successful for 20-10-2012
  # Execution successful without errors

top_level '55-50-2012'
  # Invalid day
  # Invalid month
0
задан Ryan Dakin 19 January 2019 в 21:27
поделиться

1 ответ

Проверьте, установлен ли у вас Panda3D, если нет, перейдите в командную строку и введите:
pip install Panda3D

Другая ошибка в вашем коде - это отступ при импорте ShowBase, попробуйте импорт с любым отступом.

from direct.showbase.ShowBase import ShowBase

Если у вас есть какие-либо дополнительные вопросы, попробуйте проверить Руководство по Panda3D

0
ответ дан Gerelen 19 January 2019 в 21:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: