fix bug & add except throw