已添加catch仍报'missing catch or finally after try'错误的解决方法
修复'missing catch or finally after try'错误
问题出在代码的语法结构上:你的try块被包含在if(langlist.find(c => c === language))的代码块内部,但catch块却写在了这个if块的外面,JavaScript要求try必须和对应的catch/finally处于同一代码层级,不能被其他代码块的大括号分隔开,这直接导致了语法报错。
另外你的代码末尾存在多余的闭合大括号,也需要一并清理。
修正后的代码
const {getAudioUrl} = require("google-tts-api") const langlist = ["en", "id"] let language = args[0] if(langlist.find(c => c === language)) { if(!language) return message.reply("Please enter the language") if(!args[1]) return message.reply("Please enter the text") const text = args.slice(1).join(" ") if(text.length > 200) return message.reply('You cant input a text with over 200 characters') const voiceChannel = message.member.voice.channel if(!voiceChannel) return message.reply(" Please enter a voice channel") const audioURL = await getAudioUrl(text, { lang: language, slow: false, host: 'https://translate.google.com', timeout: '150000' }) try { voiceChannel.join().then(connection => { const dispatcher = connection.play(audioURL) dispatcher.on('finish', () => { voiceChannel.leave() }) }) } catch(err){ console.log(err) message.channel.send("There is an error") } } else { return message.reply(`That language is not supported, the current supported language : [${langlist.join(", ")}]`) }
关键修正点
- 将
catch块移动到try块的直接下方,确保两者处于if(langlist.find(...))代码块的内部,保持语法层级一致 - 移除了代码末尾多余的两个闭合大括号,修复了代码结构不匹配的问题
- 调整了代码缩进,提升可读性
内容的提问来源于stack exchange,提问作者Taf not a coder
相关产品推荐
相关产品推荐

