handle panic with recover() in rulelist()