mesh=obj.data error when no object is present
yeah an if / else construct is fine.

def draw(self, context):

    obj = context.object
    if obj and obj.data:
        # do one thing, if it has data
    elif obj:
        # probably an empty, an object without data
    else:
        # show something in the case of no object selected


Study the poll functions of the UI scripts that come with Blender to get an idea of common practices. Though the poll functions are usually to completely prevent panels or menus from showing or stopping Operators from executing. You'll find the same logic in place for hidding sections of a menu / layout.

Also be aware that sometimes you should be checking for context.active_object rather than just context.object.