例外をキャッチする方法は知っていますが、コードの疑わしいセクションの後に「レスキュー」を配置するだけです。mysql2 gem を介して mysql にクエリを送信する多くの関数があり、それらの例外をキャッチしたい場合はどうでしょうか。あなたができることの1つは、それぞれに「レスキュー」ステートメントを入れることです。しかし、私はたった1つのレスキューステートメントでそれをやりたい. そのため、コードの最後に「レスキュー」を配置し、すべてのコードを「開始」と「終了」に配置しましたが、機能しませんでした。
これが私のコードです。ご覧のとおり、mysqlクエリに問題があり、「レスキュー」がファイルの終わりであるため、例外をキャッチしませんが、そのクエリの後に配置すると機能します。
require 'mysql2'
require 'colored'
begin
def log(string)
p "["+string.cyan+"]"
end
def err
p "["+"FAIL".red+"]"
end
def done
p "["+"DONE".red+"]"
end
class SqlClient
def initialize()
log "SqlClient/initialize"
puts "Host: \n"
@host = gets.strip
puts "User: \n"
@user = gets.strip
puts "Pass: \n"
@pass = gets.strip
@client = Mysql2::Client.new(host: @host , username: @user , password: @pass)
end
def list_databases()
puts "We are listing your databases(not just projects) \n \n \n "
@client.query("ELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA").each do |row|
p row["SCHEMA_NAME"]
end
puts "\n \n \n"
end
end
rescue Mysql2::Error
err
abort
end
`query': You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'ELECT SCHEMA_NAME FROM
INFORMATION_SCHEMA.SCHEMATA' at line 1 (Mysql2::Error)
私は次のようなものを探していません:
begin
# my code
rescue # this line is right after the code which is going to have problem and we catch it.
end
私はこのようなものを探しています:
begin
# first method
# second method
# thrid method
# rest of code and etc ...
# now this is end of file:
rescue
end
しかし、私のコードで見たように、うまくいきませんでした。
更新:ここで同様の質問を見つけましたが、答えはないようです :| 多分これは一種のルビーの弱点です。