2015-09-17 6 views
0

Я хочу попробовать запустить свой код, даже если я столкнулся с ошибкой. Я утверждать, где я полагаю, что я получаю ошибку ниже, и что ошибка:Программа Escape/continue, если ошибка (Ruby)

require 'rubygems' 
require 'simple_oauth' 
require 'cloudsight' 
require 'rubygems' 
require 'net/http' 
require 'uri' 
require 'json' 
require 'open-uri' 
require 'openssl' 
require 'hpricot' 


#ALCHEMY 

file='C:\\Users\\ENTER USERNAME\\Desktop\\cloudsight.txt' 
f = File.open(file, "r") 
f.each_line {|line| 

tstart = 'name"=>"' 
tstop = '"' 
term = line[/#{tstart}(.*?)#{tstop}/m, 1] 

url = 'http://access.alchemyapi.com/calls' 
service = '/text/TextGetRankedTaxonomy' 
apikey = '?apikey=ENTER ALCHEMY API KEY' 
thething = '&text=' 
termencoded = URI::encode(term) 
fullurl = url + service + apikey + thething + termencoded 

sleep 1 
opener = open(fullurl, 'Accept-Encoding' => '') {|f| f.read } 
#print opener 

Я думаю, что я получаю ошибку в этой точке.

lstart = '<label>/' 
lstop = '</label>' 
label = opener[/#{lstart}(.*?)#{lstop}/m, 1] 

sleep 1 
cstart = '<score>' 
cstop = '</score>' 
confidence = opener[/#{cstart}(.*?)#{cstop}/m, 1] 

#data = label + ',' + confidence + ',' + line 
print label 
print confidence 
print "\n" 

} 

Это ошибка, я, кажется, получают:

C:/Ruby21/lib/ruby/2.1.0/uri/common.rb:304:in `escape': undefined method `gsub' for nil:NilClass (NoMethodError) 

Любые идеи о том, как я могу передать ошибку/денешься/или сделать строку придумать вместо этого?

+0

Будет ли это работать? label = opener [/ # {lstart} (. *?) # {lstop}/m, 1] rescue '', и эта уверенность = открыватель [/ # {cstart} (. *?) # {cstop}/m, 1 ] rescue '' – Zahid

+0

Где вы используете gsub? Код, который вы отправили, не включает его. – grenierm5

+0

, то я получаю следующее: C:/Users/USERNAME/Desktop/tes453: 45: синтаксическая ошибка, неожиданный tINTEGER, ожидающий ключевое слово_до или '{' или '(' C:/Users/USERNAME/Desktop/tes453: 51: синтаксическая ошибка, неожиданный tIDENTIFIER, ожидающий keyword_do или '{' или '(' Знаете ли вы, как я могу обойти это? – semiflex

ответ

0

Я предполагаю, что ошибка исходит от этой линии:

termencoded = URI::encode(term) 

И, вероятно, происходит потому, что term равна нулю. Добавьте некоторую отладку, чтобы увидеть, что установлено term до вызова этой строки. Если вы хорошо с term быть пустым вы могли бы изменить эту строку следующим образом:

termencoded = URI::encode(term.to_s) 

ли не то, что приемлемо для вашей программы я не могу сказать.

Я бы не попытался подавить ошибку. Что-то не работает правильно, и вы должны выяснить, что это такое и как с ним справиться.

+0

Термин, кажется, уже является строкой. добавили ваш код в любом случае, и я, похоже, получаю те же результаты. То, что я делаю, это получение данных с использованием алхимии api. Иногда данные есть, и в этом случае я их получаю. Если этого не происходит, эта ошибка возникает. – semiflex

+0

Интересно. Не показывает ли stacktrace вас в строке вашего кода, из-за которой возникает ошибка? –

0

Я решил проблему. Оказывается, это проблема на стороне алхимиков в этом случае. Поиск в таксономии просто не смог найти слово