404 Posted July 3, 2012 Report Share Posted July 3, 2012 1) es saku, ka konkrētajā gadījumā, tas, ka nav iespējas ar Exception apstrādāt, bet uzreiz ir Fatal Error ir čerez ž. 2) tu man uzbrauc, ka man nepatīk "papildus iespējas izmantot to apstrādes metodi kura liekas konkrētā gadījumā ērtāka" 3) paprasu tev parādīt, kā tad es varu lietot Exception konkrētajā gadījumā 4) sāc stāstīt, cik viss īstenībā ir kruta bez Exception, kaut arī neizproti to būtību 1) Joprojām neredzu trūkumu valodā,ja viss nav pakļauts Exception,bet gan ir iespēja ignorēt kļūdu un pārbaudot funkcijas vērtību,turpināt darbu ja viss ok. 2) Ar frāzi par apstrādes metodi biju domājis iespēju gan rakstīt savus handlerus,gan ignorēt kļūdu,gan izmantot Exception ja uzskata to par vajadzīgu (pats neuzskatu ka vajag dajebkur) pašā valodā nevis tikai šajā reizē. Ja viss tas pats pieejams arī iekš pitona,tad ļoti atvainojos. 3) Piekrītu,ka nevar šajā gadījumā. Neskatoties uz to,problēma tika topikā lieliski atrisināta un trūkumu valodā tā arī neatradu,jo laikam nav sajēgas par OOP 4) Palieku pie viedokļa ka try/catch nav vajadzīgs pie katras funkcijas. Nu tā mana problēma. Bankas sistēmas nekodēju. Quote Link to comment Share on other sites More sharing options...
edgarsj Posted July 3, 2012 Report Share Posted July 3, 2012 (edited) 1) Joprojām neredzu trūkumu valodā,ja viss nav pakļauts Exception,bet gan ir iespēja ignorēt kļūdu un pārbaudot funkcijas vērtību,turpināt darbu ja viss ok. 2) Ar frāzi par apstrādes metodi biju domājis iespēju gan rakstīt savus handlerus,gan ignorēt kļūdu,gan izmantot Exception ja uzskata to par vajadzīgu (pats neuzskatu ka vajag dajebkur) pašā valodā nevis tikai šajā reizē. Ja viss tas pats pieejams arī iekš pitona,tad ļoti atvainojos. 3) Piekrītu,ka nevar šajā gadījumā. Neskatoties uz to,problēma tika topikā lieliski atrisināta un trūkumu valodā tā arī neatradu,jo laikam nav sajēgas par OOP 4) Palieku pie viedokļa ka try/catch nav vajadzīgs pie katras funkcijas. Nu tā mana problēma. Bankas sistēmas nekodēju. 1) Normālā gadījumā tiek izmests exception, tu to noķer, apstrādā un turpini darbu, jo viss ok. 2) Python visa kļūdu apstrāde balstās uz exceptions un tur arī var izvērsties pēc sirds patikas ar ignorēšanu, saviem handleriem utt. Iespējams īsti nesapratu, ko domāji. 3) Trūkums valodā ir tas, ka nomirst ar Fatal Error bez normāla stacktrace logfailos, ja nemēģina uzminēt kur un kā varētu būt kļūda un to apiet. Kā jau Atslēgas kungs mēģināja paskaidrot. 4) Protams, pie katras funkcijas tas nav vajadzīgs. Ir vajadzīgs, lai būtu skaidrs, kas nogāja greizi un vismaz viens standarta mehānisms, kas der visos kļūdu apstrādes gadījumos. Ar labu nakti. Edited July 3, 2012 by edgarsj Quote Link to comment Share on other sites More sharing options...
codez Posted July 3, 2012 Report Share Posted July 3, 2012 Tak var jau PHP uzrakstīt php erroru handleri un automātiski mest exceptionus uz visām kļūdām. Protams, es piekrītu, ka šis ir PHP mīnuss, bet salīdzinoši viegli risināms, PHP plusi tomēr pārspēj citas skriptu valodas priekš weba. Quote Link to comment Share on other sites More sharing options...
Psihius Posted July 3, 2012 Report Share Posted July 3, 2012 Tiem, kuri deva linkus uz "A fractal of bad design", iesaku palasīt šo: http://marc.info/?t=133407516900003&r=1&w=2 - tas no php-internals mailing list diskusijas par šo rakstu. Atvers dažiem acis, kā tā raksta autors PHP redzēja tālajā bērnībā. Par XML apstrādi. Čaļi, jus esat ķerti vai? Jums ko, nav ne jausmas ka XML apstrāde bāzējās uz C libxml2 bibliotekas, kuraj ir uzrakstīts wrapper lai ar to varētu strādāt PHP skriptos? Atvainoiet man, bet tā kā PHP error handling ir tāds, kāds viņš ir (vēsturiski, un tiem kas grib Exception - lūdzu, tas ir darams pāris koda līnijās) - strādā ar to. Un viss būtu labi, ja libxml2 nebūtu sava ideja kā darboties ar XML kļūdām - viņai ir savs iekšējais error handling mehanisms, kuru izraut no tās nav iespējams. Starp citu, par valid XML. Ho-ho, čali. Es strādāju daudz ar visāda veida merčantiem, bankām u.t.t. API - man katra XML atbilde obligāti tiek apstrādāta ar libxml_use_internal_errors(true) - praktiski visi laiku pa laikam kaut ko sačakarē ar XML, ka parsers nevar to apstrādāt. Pāris gadijumos XML'am nebīja root node pavisam. Citos gadijumos ja notiek kāda kļūda - XML var būt neprognozējams. Un man caur manu sistēmu mēnesī parplūst pāris miljoni usd - man ir jagarantē ka es saņēmu notifikāciju caur XML API un ja es pats kaut ko sūtu un man atbildē ir sūds, bet tajā sudā ir rakstīts ka operācija tika izpildīta - man to ir jazin. A jūs te sakat jāmet Exception un beigt darbu. Vajadzētu dažus iemest vidē, kur nauda plūst un paskatīties kā tās oliņas saspiedīsies, kad sanāks ka tāda gudrinieka dēļ kaut kur palika kādi 10-15 tūkstoši. Velns parāvis - da paskataties uz to, kas jums ir savajās valodās - puse biblioteku būs "binding to the C library witch exposes functions ...". Un ja paskatities reali - gandrīz katrajā var atrast kaut ko tādu, uz ko var rādīt ar pirkstu un ņirgāties. Ruby/Python tika radītas speciāli, un vienālga tām ir savas problēmas. PHP radijās netīšām, un attīstās. Strauji attīstās un paliek labāks, tīrāks. Un tās, ka tām ir problēmas ar standarta biblioteku (funkciju nosaukumi, parametru secība) - visi to zin, bet lai to majnīt ir vajadzīgi milzīgi resursi. Un vel jāpatur BC. Un vispāri nevienam tas nemaisa tik stipri, lai kāds uzsāktu šo procesu. Quote Link to comment Share on other sites More sharing options...
ieleja Posted July 3, 2012 Report Share Posted July 3, 2012 kuraj savajās PHP radijās netīšām, un attīstās tiešām reāls pacans-mesija Quote Link to comment Share on other sites More sharing options...
edgarsj Posted July 4, 2012 Report Share Posted July 4, 2012 Labrīt kungi :) Tak var jau PHP uzrakstīt php erroru handleri un automātiski mest exceptionus uz visām kļūdām. Protams, es piekrītu, ka šis ir PHP mīnuss, bet salīdzinoši viegli risināms, PHP plusi tomēr pārspēj citas skriptu valodas priekš weba. Vai minētajā gadījumā (http://php.lv/f/topi...ec-fatal-error/) tavs error handleris noķers to Fatal Error? Nē? Tad par ko tu runā? Izplati bullshit kā parasti. Trollis. Tiem, kuri deva linkus uz "A fractal of bad design", iesaku palasīt šo: http://marc.info/?t=...6900003&r=1&w=2 - tas no php-internals mailing list diskusijas par šo rakstu. Atvers dažiem acis, kā tā raksta autors PHP redzēja tālajā bērnībā. paklikšķināju uz pāris ziņām, nekā tāda neredzēju. varbūt ir kāds konkrētāks links? kaut gan tas, ko mēs visi esam redzējuši / domājuši bērnībā ir diezgan nesvarīgi (es piem. biju tīri lielā sajūsmā par Basic). Par XML apstrādi. Čaļi, jus esat ķerti vai? Jums ko, nav ne jausmas ka XML apstrāde bāzējās uz C libxml2 bibliotekas, kuraj ir uzrakstīts wrapper lai ar to varētu strādāt PHP skriptos? Atvainoiet man, bet tā kā PHP error handling ir tāds, kāds viņš ir (vēsturiski, un tiem kas grib Exception - lūdzu, tas ir darams pāris koda līnijās) - strādā ar to. Un viss būtu labi, ja libxml2 nebūtu sava ideja kā darboties ar XML kļūdām - viņai ir savs iekšējais error handling mehanisms, kuru izraut no tās nav iespējams. Reducējamies uz to, ka sāpe ir tieši tajā wrapperī. Nez kāpēc priekš Python tāds wrapperis uztaisīts ar visām Exception. Un šis nav vienīgais sūkājošais wrappers. Starp citu, par valid XML. Ho-ho, čali. Es strādāju daudz ar visāda veida merčantiem, bankām u.t.t. API - man katra XML atbilde obligāti tiek apstrādāta ar libxml_use_internal_errors(true) - praktiski visi laiku pa laikam kaut ko sačakarē ar XML, ka parsers nevar to apstrādāt. Pāris gadijumos XML'am nebīja root node pavisam. Citos gadijumos ja notiek kāda kļūda - XML var būt neprognozējams. Un man caur manu sistēmu mēnesī parplūst pāris miljoni usd - man ir jagarantē ka es saņēmu notifikāciju caur XML API un ja es pats kaut ko sūtu un man atbildē ir sūds, bet tajā sudā ir rakstīts ka operācija tika izpildīta - man to ir jazin. A jūs te sakat jāmet Exception un beigt darbu. Vajadzētu dažus iemest vidē, kur nauda plūst un paskatīties kā tās oliņas saspiedīsies, kad sanāks ka tāda gudrinieka dēļ kaut kur palika kādi 10-15 tūkstoši. Dārgais Guru, piemēros augstāk taču bija rakstīts, ka varam izmesto Exception noķert, attiecīgi apstrādāt un turpināt darbu. Arī tev nav zināms, kā pareizi strādāt ar Exception mehānismu? Es gaidīju, ko vairāk no PHP internals listes biedra un valodas virziena iespaidotāja. Bet, acīmredzot, tas kā reizi ir piemērs, kāpēc ar PHP ir kā ir. PHP radijās netīšām, un attīstās. Strauji attīstās un paliek labāks, tīrāks. Un tās, ka tām ir problēmas ar standarta biblioteku (funkciju nosaukumi, parametru secība) - visi to zin, bet lai to majnīt ir vajadzīgi milzīgi resursi. Un vel jāpatur BC. Un vispāri nevienam tas nemaisa tik stipri, lai kāds uzsāktu šo procesu. Tieši tāpēc arī man PHP nepatīk lietot, jo trūkumu ir stipri vairāk kā citām valodām tevis minēto iemeslu dēļ. Un neviens tos nelabos. Ja tev patīk, tad lieto un priecājies. Par Backwards Compatibility - ar prieku skatos uz Python3, kur beidzot visi stringi by default būs unicode. Tur viņi nebaidās uzlabot valodu, salaužot BC. Jo arī piedāvā skaidru ceļu, kā migrēt. Quote Link to comment Share on other sites More sharing options...
edgarsj Posted July 4, 2012 Report Share Posted July 4, 2012 tiešām reāls pacans-mesija Tas gan nebija smuki. Ja dzimtā valoda nav latviešu, tad skaidrs, ka var gadīties kļūdas, it īpaši, ja raksta daudz un ātri. Quote Link to comment Share on other sites More sharing options...
marrtins Posted July 4, 2012 Report Share Posted July 4, 2012 Visus exceptionus tāpat neparedzēsi, katram apstrādi neuzrakstīsi. Pārītim uzrakstīsi, bet būs neparedzēts exceptions un jāsprāgst nost gribot negribot. Quote Link to comment Share on other sites More sharing options...
codez Posted July 4, 2012 Report Share Posted July 4, 2012 Kur problēma? http://codepad.org/njb3juqT function error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } set_error_handler("error_handler"); $doc = new DOMDocument(); try { $doc->loadXML('<root><sajats xml></root>'); } catch (Exception $e){ echo "lalala"; } bez error handlera: http://codepad.org/Jt7ol0ho Quote Link to comment Share on other sites More sharing options...
edgarsj Posted July 4, 2012 Report Share Posted July 4, 2012 Visus exceptionus tāpat neparedzēsi, katram apstrādi neuzrakstīsi. Pārītim uzrakstīsi, bet būs neparedzēts exceptions un jāsprāgst nost gribot negribot. Tad vismaz zināsi konkrēti kāpēc nosprāga, nevis vienkārši Fatal Error. Un arī neparedzēto exceptionu var noķert un apstrādāt gracefully, piemēram, kā kļūdas paziņojumu lietotājam. Quote Link to comment Share on other sites More sharing options...
edgarsj Posted July 4, 2012 Report Share Posted July 4, 2012 Kur problēma? http://codepad.org/njb3juqT function error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } set_error_handler("error_handler"); $doc = new DOMDocument(); try { $doc->loadXML('<root><sajats xml></root>'); } catch (Exception $e){ echo "lalala"; } bez error handlera: http://codepad.org/Jt7ol0ho Lūdzu piemēru ar simplexml_load_file, demagog. Quote Link to comment Share on other sites More sharing options...
codez Posted July 4, 2012 Report Share Posted July 4, 2012 (edited) Nebūs uz codepad, jo nevaru tur uzlikt papildus a.xml failu, bet lokāli izmet normālu exceptionu. <?php function error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } set_error_handler("error_handler"); try { simplexml_load_file("a.xml"); } catch (Exception $e){ echo "lalala"; } P.S. Varu piedāvāt tik daudz: http://codepad.org/JJZCrHrv Bet šis saistīts ar to, ka neļauj atvērt resursu, nevis xml satura kļūdu, bet tāpat skaisti izmet exceptionu. Edited July 4, 2012 by codez Quote Link to comment Share on other sites More sharing options...
marrtins Posted July 4, 2012 Report Share Posted July 4, 2012 Tad vismaz zināsi konkrēti kāpēc nosprāga, nevis vienkārši Fatal Error. Un arī neparedzēto exceptionu var noķert un apstrādāt gracefully, piemēram, kā kļūdas paziņojumu lietotājam. Tam ir error logi :) Man šķiet, Tu par daudz piesienies lietām, par kurām galīgi nav jāsatraucās. Tāpat tas fraktāļ džeks. Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted July 4, 2012 Report Share Posted July 4, 2012 (edited) Visus exceptionus tāpat neparedzēsi, katram apstrādi neuzrakstīsi. Pārītim uzrakstīsi, bet būs neparedzēts exceptions un jāsprāgst nost gribot negribot. Pareizi un nepareizi. Pareizi, jo apgalvojums patiešām ir patiess - neparedzētas problēmas gadījumā jābeidz attiecīgā līmeņa process (bet ne vienmēr - visa aplikācija). Nepareizi, jo nav tādas īstas izpratnes par to, kā tas viss ir domāts. Būs grūti pārliecinātu PHP programmētāju pielauzt skatīties uz lietām savādāk. Un te ja ir tas, why PHP sux - iemetīs veselīgu, tīru galvu iekš kāda PHP ģēniju projekta, ātri vien sāks kūkot uz debesīm un sarunāties ar kaķiem. Vai kaijām. No pieredzes - PHP frontē ir augsta pašpārliecinošo visvaru un visdaru koncentrācija, kuriem nav iekšējas vēlmes pēc tādām lietām, kā problēmu abstrakcijas, sistemātiskums, standarti, dokumentācija. Jo tas viss taču ir traucēklis dinamiskajā ikdienā, kur katra diena nes jaunu uzvaru - safiksētu problēmu ar uzsetotiem parametriem, utml. Edited July 4, 2012 by Mr.Key Quote Link to comment Share on other sites More sharing options...
edgarsj Posted July 4, 2012 Report Share Posted July 4, 2012 (edited) Nebūs uz codepad, jo nevaru tur uzlikt papildus a.xml failu, bet lokāli izmet normālu exceptionu. <?php function error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } set_error_handler("error_handler"); try { simplexml_load_file("a.xml"); } catch (Exception $e){ echo "lalala"; } P.S. Varu piedāvāt tik daudz: http://codepad.org/JJZCrHrv Bet šis saistīts ar to, ka neļauj atvērt resursu, nevis xml satura kļūdu, bet tāpat skaisti izmet exceptionu. Atvainojos. Šis daļēji patiešām palīdz. Līdz pilnai laimei gan pietrūkst exception klase, kas būtu atbilstoša tam error message ziņojumam, kurš stacktrace iekšā parādās. Teorētiski var mēģināt pēc tā kaut kā apstrādāt specifiskās kļūdas, lai gan tas ir čerež ž atkal. Bet pats jau atzini, ka šis ir PHP mīnuss. Un pēc dokumentācijas spriežot jāņem vērā, ka "It's worth noting again that no matter what you do, "E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT" will never reach your custom error handler, and therefore will not be converted into ErrorExceptions. Plan accordingly." Edited July 4, 2012 by edgarsj Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.