Исключения не должны использоваться для проверки. В основном вы не должны проходить стек для проверки в целом.
Что вы в основном делаете:
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
Проверьте, установлен ли у вас Panda3D, если нет, перейдите в командную строку и введите:
pip install Panda3D
Другая ошибка в вашем коде - это отступ при импорте ShowBase, попробуйте импорт с любым отступом.
from direct.showbase.ShowBase import ShowBase
Если у вас есть какие-либо дополнительные вопросы, попробуйте проверить Руководство по Panda3D