우리는 코 루틴을 적극적으로 사용하는 Python 2 프로젝트를 가지고 있습니다. 우리는 coroutine 내부 처리 예외에 대한 지침을 찾을 수 없습니다.토네이도 코 루틴에서 예외를 발생 시키거나 gen.Return 객체를 반환합니다.
예를 들어 here의 토네이도 개발자는 coroutines should never raise an exception
을 언급했지만 그 이유는 분명하지 않습니다. 이 방법은 작품과 크게 Tornado.web 자체에 사용되는 것 같은데 :
https://github.com/tornadoweb/tornado/blob/master/demos/blog/blog.py#L180
class AuthCreateHandler(BaseHandler):
def get(self):
self.render("create_author.html")
@gen.coroutine
def post(self):
if self.any_author_exists():
raise tornado.web.HTTPError(400, "author already created")
hashed_password = yield executor.submit(
bcrypt.hashpw, tornado.escape.utf8(self.get_argument("password")),
bcrypt.gensalt())
tornado.web.HTTPError은 기본 예외 클래스 확장합니다. 또한, 여기 https://github.com/tornadoweb/tornado/issues/759#issuecomment-91817197에 대한 설명은 코 루틴 내부에서 예외를 발생시키는 것이 적절하다고 제안합니다.
또한 here, 활성 토네이도 기여 예외를 제기하는 것은 괜찮 제안 :
class PostHandler(tornado.web.RequestHandler):
@gen.coroutine
def get(self, slug):
post = yield db.posts.find_one({'slug': slug})
if not post:
raise tornado.web.HTTPError(404)
self.render('post.html', post=post)
가 토네이도 코 루틴 내에서 예외를 높이는데 거기에 어떤 단점인가, 아니면해야 우리
raise gen.Return(exception_object)
?