Мне нужно было передать некоторый параметр моему методу для повторения и получить значение результата; так что мне нужно выражение .. Я создаю этот класс, который выполняет эту работу (она вдохновлена на LBushkin's), вы можете использовать ее следующим образом:
static void Main(string[] args)
{
// one shot
var res = Retry<string>.Do(() => retryThis("try"), 4, TimeSpan.FromSeconds(2), fix);
// delayed execute
var retry = new Retry<string>(() => retryThis("try"), 4, TimeSpan.FromSeconds(2), fix);
var res2 = retry.Execute();
}
static void fix()
{
Console.WriteLine("oh, no! Fix and retry!!!");
}
static string retryThis(string tryThis)
{
Console.WriteLine("Let's try!!!");
throw new Exception(tryThis);
}
public class Retry<TResult>
{
Expression<Func<TResult>> _Method;
int _NumRetries;
TimeSpan _RetryTimeout;
Action _OnFailureAction;
public Retry(Expression<Func<TResult>> method, int numRetries, TimeSpan retryTimeout, Action onFailureAction)
{
_Method = method;
_NumRetries = numRetries;
_OnFailureAction = onFailureAction;
_RetryTimeout = retryTimeout;
}
public TResult Execute()
{
TResult result = default(TResult);
while (_NumRetries > 0)
{
try
{
result = _Method.Compile()();
break;
}
catch
{
_OnFailureAction();
_NumRetries--;
if (_NumRetries <= 0) throw; // improved to avoid silent failure
Thread.Sleep(_RetryTimeout);
}
}
return result;
}
public static TResult Do(Expression<Func<TResult>> method, int numRetries, TimeSpan retryTimeout, Action onFailureAction)
{
var retry = new Retry<TResult>(method, numRetries, retryTimeout, onFailureAction);
return retry.Execute();
}
}
ps. решение Л.Бушкина делает еще один повтор = D
Ошибка из-за того, что вы не обращаетесь к словарному ключу 'playlists'
for plst in playlist['playlists']:
print(plst['name'])
# Piano
Вы перебираете не тот объект.
Не забывайте, что json.loads(json_data)
возвращает объект, как он хранится. В вашем случае это диктат только с одним элементом: 'playlist'
. Вы должны получить доступ к этому элементу с помощью loaded_json['playlist']
, а затем перебрать список воспроизведения.
Здесь loaded_json
относится к типу Dict[List[Dict]]
. Будьте осторожны с JSON и вложенными структурами данных.
Попробуйте:
loaded_json= json.loads(json_data) #type: Dict[List[dict]]
for playlist in loaded_json['playlist']: #type: dict
print('{}\n'.format(playlist['name']))
Сделав это, вы получите название всего списка воспроизведения.
Документация: Кодер и декодер JSON