Ne zaman Yazma Hatası kullanın vs Atmak gerekir?
PoshCode üzerine Olsun-WebFile bir senaryo bakıyor: http://poshcode.org/3226 Garip-beni bu mekanizma fark ettim:
$URL_Format_Error = [string]"..."
Write-Error $URL_Format_Error
return
Aksine: bunun nedeni nedir
$URL_Format_Error = [string]"..."
Throw $URL_Format_Error
hatta daha iyi:
$URL_Format_Error = New-Object System.FormatException "..."
Throw $URL_Format_Error
Anladığım kadarıyla Yazma Hatası Dönüş takip kullanmamalısınız bana öyle geliyor ki, bu yüzden non-sonlandırma hataları için Yazma Hatası kullanın ve sonlandırma hataları için Atmak gerekir. Bir fark var mı?
CEVAP
Write-Error
eğer kritik olmayan bir hata kullanıcıyı bilgilendirmek için kullanılır. Varsayılan olarak yaptığı Tüm konsol üzerinde kırmızı metin bir hata mesajı yazdırmak. Bir boru ya da devam eden bir döngü durmuyor. Diğer yandan Throw
sonlandırıcı bir hata ne denir üretir. Eğer atmak kullanırsanız, boru hattı ve/veya geçerli döngü sonlandırılır. Aslında tüm yürütme trap
Bir veya sonlandırıcı hata işlemek için try/catch
bir yapı kullandığınız sürece iptal edilecektir. Unutulmaması gereken bir şey var, "Stop"
$ErrorActionPreference
set Write-Error
kullanın sonlandırıcı bir hata üretecektir.
Script bu biz bulmak için size bağlı:
if ($url.Contains("http")) {
$request = [System.Net.HttpWebRequest]::Create($url)
}
else {
$URL_Format_Error = [string]"Connection protocol not specified. Recommended action: Try again using protocol (for example 'http://" $url "') instead. Function aborting..."
Write-Error $URL_Format_Error
return
}
Bu fonksiyon yazarı bu görevi yürütmeyi durdurma ve ekranda bir hata iletisi görüntülemek için istemiş gibi görünüyor ama tüm komut dosyası yürütme durdurmak istemiyordu. Senaryo yazarı throw
ancak işlevi çağrılırken try/catch
kullanmak gerekir anlamına gelir.
return
bir işlevi, komut ya da komut bloğu olabilir, geçerli kapsam çıkılacak. Bu iyi bir kod ile gösterilmiştir:
# A foreach loop.
foreach ( $i in (1..10) ) { Write-Host $i ; if ($i -eq 5) { return } }
# A for loop.
for ($i = 0; $i -le 10; $i ) { Write-Host $i ; if ($i -eq 5) { return } }
Her ikisi için de çıkış
1
2
3
4
5
Bir tane yakaladım burada ForEach-Object
return
kullanıyor. Tahmin edebileceğiniz gibi işleme kırılmaz.
Daha fazla bilgi:
$ErrorActionPreference
: http://technet.microsoft.com/en-us/library/dd347731.aspxtry/catch
: http://technet.microsoft.com/en-us/library/dd315350.aspxtrap
: http://technet.microsoft.com/en-us/library/dd347548.aspxthrow
: http://technet.microsoft.com/en-us/library/dd819510.aspxreturn
: http://technet.microsoft.com/en-us/library/dd347592.aspx
Ne zaman salt Okunur kullanın ve tek ö...
Ne zaman bir Liste kullanın vs bir Lin...
Neden Objective-C metot adı son bölümü...
Ne zaman çağrı frameworkpropertymetada...
JSLint kullanın veya JavaScript doğrul...