En Kısa Hata Mesajı


135

Meydan okuma

Derlendiğinde veya yürütüldüğünde, programın kendisinden daha küçük önemli bir hata mesajı veren en kısa programı yazın. Hata mesajı, Python's gibi programın kendisi tarafından oluşturulamayabilir raise. Geçerli bir cevap hem kodu hem de hata mesajını içermelidir. En kısa geçerli cevap kazanır.

Hata mesajı, hata mesajı olarak sayılmaz.

Örnek (Lua)

Kod (46 bayt):

[
--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Hata (45 bayt):

[string "[..."]:1: unexpected symbol near '['

Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Dennis,

1
@Dennis, "OP soruları açıklığa kavuşturmaz" sorununu çözmenin bir yolu.
Ørjan Johansen

1
En çok oyu alan cevabımı kabul ettiğiniz için teşekkür ederiz; Ancak, bu kod golf etiketlendi , bu nedenle en kısa olan bu cevabı kabul etmelisiniz .
MD XF

@smartpeople şudur: " __main__.CodeException: Raised an &rror." benim hatam ya da şudur: " Raised an &rror."
FantaC

Çin'de çalışan TrumpScript?
Stan Strum

Yanıtlar:


58

ed , 3 bayt

Not: Buradaki cevapların çoğu, sayılarındaki hata iletisinin bir parçası olarak yazdırılan sondaki yeni satırı görmezden geliyor. Ancak soruda onu görmezden gelmeyi haklı çıkaracak hiçbir şey görmüyorum ve yazar yeni satırın dahil edilmesi gerektiğini belirtti . Yani soru değişmediği sürece, onu ekleyeceğim.

Kod (takip eden yeni satır ile):

??

Hata (takip eden yeni satırda):

?


19
Aslında bunu yenmek imkansız. : P
totallyhuman

1
Ed toplama ve ilkellik testi yapabilir mi? Yoksa bu tür bir meydan okuma için gerekli değil mi?
Stephen,

4
@StepHen Evet, her zamanki regex-backreferences hilesiyle unary ve asallık testlerini yapabilir.
Anders Kaseorg

1
Çok zekice ama '?' ölümcül değil.
Mark Plotnick

2
Bayraklarda belirtildiği gibi, kod bir terminalden okunmazsa hata ölümcül olur. Çevrimiçi deneyin!
Dennis,

59

C (modern Linux), 19 bayt

Ünlü segfault'umu yapardım ama tamamen insanca çaldı.

main(){longjmp(0);}

Çıktı (18 bayt):

Segmentation fault

Şu anda benden daha yüksek bir puanınız var ... Kazan-kazan?
totallyhuman


Daha kısa sürümlü başka bir yerel ayar yok mu (Böylece kullanabilmeniz için main(){main();})?
12431234123412341234123

@ 12431234123412341234123 Bildiğimden değil. Ayrıca, main(){main();}seg-arıza için garanti edilmez.
MD XF,

1
@MDXF Garantisi yoktur (ve optimizasyon gcc veya clang ile etkinleştirilmişse, sonsuz bir döngüye neden olur veya görüşmeyi yok sayar). Ancak Code Golf'ta çalışan bir uygulamaya ihtiyacımız var.
12431234123412341234123

48

Python 2,35 bayt

import sys;sys.tracebacklimit=000;a

Hata verir:

NameError: name 'a' is not defined

14
izleme sınırını değiştiriyor ... nice one
HyperNeutrino

1
Bu akıllıca!
Skyler,

34

JavaScript (Firefox), 31 bayt

# This is a comment, right? ...

Bu hatayı atar:

SyntaxError: illegal character

Windows 7'de Firefox 54.0.1 konsolunda test edilmiştir.


26

Python 2 , 87 79 bayt

-8 bayt Zacharý ve Outgolfer Erik'e teşekkürler.

from __future__ import braces
#i am most surely seriously actually totallyhuman

Çevrimiçi deneyin!

Hata mesajı, 78 bayt:

Kodun, adında bir dosyada saklandığını varsayalım a.

  File "a", line 1
    from __future__ import braces
SyntaxError: not a chance

Bu aslında Python'da küçük tatlı bir Paskalya yumurtası. : D


1
Tek karakterli bir dosya adı varsayabilirsin!
Zacharý,

1
, Sen golf yapabilirsiniz 1-Char dosya adını varsayarsak bu .
Outgolfer Erik,

Heh, güzel. - - -
totallyhuman

1
Ancak hata mesajı programın kendisinden daha küçük olmalı ...
Leaky Nun

1
Eğer IDLE kullanıyorsanız, \s\sFile "<stdin>", line 1\nSyntaxError: not a chancehangisinin sadece 50 bayt olduğunu [ \sboşluk ve \nyeni satır] alabilirsiniz, böylece 51 baytlık bir program alabilirsiniz ..
boboquack

20

Haskell, 13 bayt

main = (main)

t.hsBir karakter adı veya başka bir karakter kaydedin , derleyin ghcve çalıştırın. Hata mesajı (sondaki yeni satır ile):

t: <<loop>>

19

Taksi , 38 21 bayt

Switch to plan "abc".

üretir:

error: no such label

Çevrimiçi deneyin!

Engineer Toast sayesinde -17 bayt

Var olmayan “abc” ye geçmeye çalışır. Bir yerin olurdu [abc].


4
Sen ile 21 bayt aşağı alabilirsiniz Switch to plan "abc".üreten error: no such label. Bu, Taksi'nin bazı geleneksel dilleri geçtiği birkaç kod golfü mücadelesinden biri olabilir .
Mühendis Toast,

@EngineerToast teşekkürler, bunu düşünmedim.
Stephen,

18

> <> , 26 bayt

>>>>>>>>>>>>>>>>>>>>>>>>>:

Çevrimiçi deneyin!

Fish'teki her hata mesajı something smells fishy..., bu yüzden işaretçiyi bundan daha uzun olacak kadar doğru şekilde hareket ettirir ve o sırada boş olan yığının üstünü kopyalamaya çalışır.


2
Hoşuma gitti ve kesinlikle tüm çözümlerin en balıklısı :-)
Xan-Kun Clark-Davis

@ Xan-KunClark-Davis iç çekiyorum P: sen ... vardı
HyperNeutrino

18

JavaScript (Firefox), 21 bayt

(a=null)=>a.charAt(1)

Hata (20 bayt) :TypeError: a is null


2
D'oh! Daha kısa bir tane olduğunu biliyordum ...
ETHproductions 21:17

Aynı fikre sahiptim, = null; a.x01234567890 - Aynı miktarda bayt geldi
RuteNL

16

Sistem V kabuğu, 25 bayt

mount /dev/hda1 /mnt/hda1

Hata mesajı (23 bayt):

mount: not a typewriter

"Daktilo değil" veya Unix sistemlerinde ENOTTYtanımlanan bir hata kodudur errno.h. Bu, ioctl sistem çağrısında geçersiz bir ioctl (giriş / çıkış kontrolü) numarasının belirtildiğini belirtmek için kullanılır. Sistemimde /usr/include/asm-generic/errno-base.hbu satırı bulabilirim:

#define ENOTTY          25      /* Not a typewriter */

Sürüm 6 UNIX ve daha eski sürümlerde, G / Ç, bir teletype (TTY) gibi seri bağlı terminal cihazlarıyla sınırlandırılmıştır. Bunlar genellikle gttyve sttysistem çağrıları aracılığıyla yönetiliyordu . Biri bu sistem çağrılarından birini terminal olmayan bir cihazda kullanmaya çalışırsa ENOTTY, üretildi.

Günümüzde, doğal olarak bir teletype kullanmaya gerek yoktur. Ne zaman gttyve sttyile değiştirilmiştir ioctl, ENOTTYtutuldu. Bazı sistemler hala bu mesajı gösterir; ama çoğu "yerine cihaz için uygun olmayan ioctl" diyor.


Lütfen açıklayın ...
Mega Man

@ MegaMan Açıklama ile güncellendi.
MD XF

1
Aslında aydınlatıcı açıklama için oy verin.
Xan-Kun Clark-Davis

11

QBasic, 11 bayt

QBasic'te biri daha golf oynayabilecek 11 bitlik iki çözüm var. QBasic'in sahip olduğu en kısa hata mesajı şöyledir overflowve şu şekilde tetiklenebilir:

i%=i%+32677

Bu, overflowçünkü bir tamsayı ( i%) için max 32676. Ben alamadım 32677QBasic uzun bu otomatik döküm olmadan golfed ...

11 byte bir başka hata olur out of data. QBasic, DATAprogramda veri depolayan ve daha sonra READifadelerle erişilebilen ifadelere sahiptir. S'den daha READfazla DATAs vermek hataya neden olur:

READ a$ '--

İfadenin, hata mesajının uzunluğuna ulaşmasını sağlamak için bir yorum ile doldurulduğunu unutmayın. Evet, daha kısa bir program içeren bir hata mesajım ve daha kısa bir hata mesajına sahip bir program var ...


11

C (Modern Linux), 19 bayt

Bunu sohbette önerdim ama kimse bu fırsatı yakalayamadı. : MD XF'nin komik cevabına P Kredi .

main(){puts('s');;}

Hata mesajı, 18 bayt

Segmentation fault

1
Ancak hata mesajı programın kendisinden daha küçük olmalı ...
Leaky Nun

Bayt sayıları berbattı, benim hatam.
totallyhuman

9
Bu, alt işlem 139 çıkış koduyla sonlandığında kabuk tarafından basılan genel bir mesajdır. C programının kendisi hiçbir hata mesajı vermez.
Dennis,

7
@Dennis Çıkış kodu 139, aslında kabuk tarafından yapılan başka bir yalandır. Unix, sinyal 11 ( W_EXITCODE(0, 11) == 11) ile çıkış kodu 139 ( W_EXITCODE(139, 9) == 139 << 8) arasında ayrım yapar . Kabuklar set $?olmayan surjectively için WIFEXITED(wstatus) ? WEXITSTATUS(wstatus) : WTERMSIG(wstatus) + 128, ama çoğu dil farkı ortaya.
Anders Kaseorg

2
@Anders Herhangi bir şansla WIFEXITED(wstatus)denk DIVORCE(alimony)mi?
Janus Bahs Jacquet

11

Javascript (V8), 24 bayt

decodeURIComponent('%');

Hata, 23 bayt:

URIError: URI malformed

Nodejs v6.11.0 ve Google Chrome v59.0.3071.115 üzerinde test edilmiştir .

Çevrimiçi deneyin!

TIO’nun hata mesajını genişlettiğini unutmayın.


5
PPCG'ye Hoşgeldiniz!
Stephen


10

PowerShell , 215 189 bayt

[]
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Çevrimiçi deneyin!

Yani, PowerShell ... ayrıntılı ... hata mesajlarına sahiptir. Ek olarak, çoğu sözdizimi dışı hata mesajı, Çalışma Zamanı İstisnalarıdır, yani ölümcül olmadıkları anlamına gelir, bu da kısa bir ayrıştırma hatası bulma ihtiyacını azaltır.

Ben düşünüyorum bu değilse, en kısa biridir en kısa, @TessellatingHeckler bu kısa ayrıştırma hatası olduğunu gösterdiğini ve hala ağırlığında 188sadece hata iletisi için bayt. Bu yüzden temelde "kod" baytına 1ulaşmak için yeterli s eklememiz gerekir 189.

c:\a.ps1Örneğin bunu yerel olarak çalıştırmak , bayt sayısını kısaltır, çünkü daha kısa bir dosya yolu olur, ancak daha sonra TIO'da kullanılamaz.

Hata üretir:

At /tmp/home/.code.tio.ps1:1 char:2
+ []
+  ~
Missing type name after '['.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingTypename

Sizden biri sorduğunuzda yorumlarda üç soru soruldu, ancak ikisini de sormamışsınız, cevabınıza uyguladınız, sizinkilere değil.
user72528

@ user72528 Evet, bunu eğlenceli buldum.
AdmBorkBork, 21:17

Bir karakter dosya ismi kullanabilirsiniz!
Zacharý,

1
@ Zacharý Yapabiliyorum, ancak TIO'nun kum havuzunu nasıl kullandığı nedeniyle TIO'da tekrar üretilemiyor. Birkaç bayttan tasarruf etmekten çok TIO'da kullanılabilir kalmasını tercih ederim.
AdmBorkBork

2
Hangisi []daha kısa bir hataya benziyor Missing type name after '['ve tam olarak nasıl saydığınıza bağlı olarak 190 civarında olabilir - tio.run/##K8gvTy0qzkjNyfn/PzqWy3Dogv//AQ (buradaki ayrıştırıcı dizilerden alınan bana en kısa çözümleyici hatası gibi görünüyor ([xml](gc .\ParserStrings.resx)).root.data.value | sort { $_.length } -Desc).
MozaiklerHeckler

9

Commodore 64 Basic, 15 bayt

?SYNTAX   ERROR

üretir

?SYNTAX  ERROR

(Programın üç bulunduğu hata mesajındaki iki boşluğa dikkat edin)

?SYNTAX ERRORile bağlıdır ?VERIFY ERRORC64 temel üretebilir üçüncü kısa hata mesajı ve güvenilir bir şekilde kod (en kısa mesajı ile tetiklenebilir olan en kısa şekilde, BREAK IN 1ederken, kullanıcı etkileşimi gerektirir ?LOAD ERRORkusurlu bandı veya disket gerektirir ve ?VERIFY ERRORvarlığını gerektirir RAM'deki programla eşleşmeyen bir dosya içeren disket veya teyp).


1
Ha, benimkini gönderdiğimde bunu görmedim bile . Başka bir BASIC kullanıcısı görmek her zaman iyi ... +1
MD XF

8

R , 29 28 bayt

JarkoDubbeldam sayesinde -1 bayt

a #abcdefghijklmnopqrstuvwxy

Error: object 'a' not found27 bayt olan hatayı atar .

Çevrimiçi deneyin!


2
a #abcdefghijklmnopqrstuvwxyhatası Error: object 'a' not foundbir bayt daha kısa.
JAD,

@JarkoDubbeldam teşekkür ederim.
Giuseppe

7

Yakut ( 33 32 bayt)

32 bayt

&
#abcdefghijklmnopqrstuvwxyz12

Hatayı atar ("a" adlı bir dosya varsayarak):

31 bayt

a:1: syntax error, unexpected &

Düzenleme : kullanarak bir bayt kapalı traş &yerine <<sayesinde Eric : Ayrıca bile kısa Yakut çözüm geldi, http://codegolf.stackexchange.com/a/135087/65905


1
PPCG'ye Hoşgeldiniz!
Martin Ender,

@EricDuminil güzel! Tüm karakter operatörlerinin hata mesajında ​​alıntı yaptığını düşündüm, ama haklısın: &değil. Temiz! Ayrıca, onaltılık kaçış ile iyi bulmak. Bir sözdizimi hatası dışında daha kısa ve yığın halinde izlemeyen önemli bir hata mesajı bulmakta zorlanıyordum.
ameketa

@ameketa: Aslında bir bruteforce programı yazdım ve mümkün olan her 1, 2 ve 3 byte Ruby programını test ettim: D Bağlantı için teşekkürler.
Eric Duminil

5

Brainf ** k, 17 bayt, bu tercüman

+++++++++++++++<<

Brainf ** k öyle basit bir dil ki hemen hemen her tercümanın farklı bir hata mesajı var. Bu Memory Error: -1, işaretçi sola doğru çok fazla hareket ettiğinde ve başka bir işlem denediğinizde için kullanılır.


Bir tercüman seçmenin, bir dil seçmek kadar zorluğun bir parçası olduğunu tahmin ediyorum.
user72528, 21:17

@ user72528 Pekala, burada bir dili tercümanı ile tanımlıyoruz, bu yüzden bu zorluk tercümanı en kısa hata mesajlarıyla
seçmekle ilgili

1
Beynini kim atıyor? Kimse? Peki.
Outgolfer Erik, 19: 28'de

Rakipsiz çözüm, 1 karakterlik bir hataya neden olan iki baytlık bir çözüm olacaktır.
Zacharý,

@ Zacharı Kesinlikle lol
HyperNeutrino


5

TryAPL, 11 bayt

Kod (11):

'abcdefghij

Hata (10):

open quote

5

Javascript (Firefox), 29 27 bayt

new Date('-').toISOString()

RangeError: invalid date24 bayt olan atar . Firefox 54.0.1 üzerinde Windows 10'da test edilmiştir.


5

ZX Spectrum Basic, 9 bayt

RUN USR 8

üretir:

Hata mesajı

Açıklama:

Programın ASCII sunumunu satır sonları da dahil olmak üzere uzunluk amaçlı (sayısız) sayıyorum.

Genellikle ZX Spectrum hata iletileri daha uzun ve daha yararlı bundan daha vardır - 0x0008 de ROM rutin makine kodu çağrısı aşağıdaki hata kodunu bekler RST 8. Ve bu saçma hata mesajı üretir ROM, bazı rasgele (deterministik) bayt getirir M. 5hata numarasıdır, ,hata yazdırma yordamı ile eklenir ve 0:1satırın kendisi: hatanın komut konumu.


Aslında bu zaten normalde 9 bayttır, çünkü ZX Spectrum, sayıları çalışma zamanında değerlendirmez, bu nedenle aslında 8'in ikili gösterime doğrudan erişmesini sağlayan 6 gizli bayt vardır.
Neil


4

Perl 5 , 5 bayt

die$/

Bir bayt için yeni bir satır çıkarır.

Çevrimiçi deneyin!


._. Şimdi ... eğer sadece boş dosyadaki hataları perl!
Zacharý,

4
Bekle, bu "programın kendisi tarafından oluşturulmayabilir" ihlali midir? Bu kuralın ne dediğini anlamadım.
aschepler

1
@ Zacharý ... toplam uzunluğu negatif olan bir hata mesajı veriyor?
aschepler

1
Bu geçersiz olabilir ... veya olmayabilir, OP'nin hata mı, yoksa hata mesajı
Zacharý

^ açıklama: bir programın doğrudan mı yoksa doğrudan bir hata mesajı oluşturduğundan mı
Zacharý

4

Perl 5 , 11 bayt

Diğer cevabımın meydan okuma kurallarına uyup uymadığı konusunda net olamadığım için, işte başka bir alternatif.

#line 0
die

Hata çıkışı:

Died.

6 bayt için biten bir newline ile.

Çevrimiçi deneyin!

Nedense Perl yorumlayıcısı dahili işlevi Perl_mess_svşunları içerir:

if (CopLINE(cop))
    Perl_sv_catpvf(aTHX_ sv, " at %s line %" IVdf,
                    OutCopFILE(cop), (IV)CopLINE(cop));

nerede CopLINE(cop)geçerli kod bağlam satır numarası alır. Dolayısıyla, bu satır numarası sıfıra giderse, Perl olağan " at <filename> line <n>"mesajı hata mesajına ekleyerek atlar .


1
Bu benim için de geçerli değil. IIRC die, programın çıkması içindir.
sergiol,

1
Bu pythondan farklı raisemı?
Eric Duminil

Peki, OP ya hatayı ya da hata mesajını oluşturuyor olabilir . Hangisini kastettiğini yorumladım.
Zacharý

4

ArnoldC , 150 bayt

IT'S SHOWTIME
HEY CHRISTMAS TREE b
YOU SET US UP 0
GET TO THE CHOPPER b
HERE IS MY INVITATION b
HE HAD TO SPLIT 0
ENOUGH TALK
YOU HAVE BEEN TERMINATED

Çevrimiçi deneyin!

Hata 94 bayttır (sondaki yeni satır dahil):

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at code.main(Hello.java)

Korunmuş çünkü bence bu daha komik - spoiler: o genç sarkık tehlikelerden biriydi.

ArnoldC , 280 bayt

IT'S SHOWTIME
HEY CHRISTMAS TREE BRBDoorBetterNotBeThosePeskyTeenagePranksters
YOU SET US UP 0
GET YOUR ASS TO MARS BRBDoorBetterNotBeThosePeskyTeenagePranksters
DO IT NOW
I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
YOU HAVE BEEN TERMINATED

pseudocode:

start program
new variable
set to 0
set new variable to output from function
call function
take input
end program

Çevrimiçi deneyin!

Bir "giriş yok" hatası oluşturur. (ArnoldC’daki diğer tüm hatalar, büyük bir boyler plakasını içerir):

279 bayt (sondaki yeni satır dahil):

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at code.main(Hello.java)

4

TI-Basic, 9 bayt

: En kısa hata iletileri 8 bayt her biri ERR:DATE, ERR:MODE, ERR:STAT, ve ERR:ZOOM. Düşünmedim, ERR:DATEçünkü bu dahili bir saat olmadan modellerde çalışmıyor. Ayrıca, gitmedim ERR:ZOOMçünkü tetiklemek çok zor görünüyordu.

Program (9 bayt):

Seq:DrawInv X:::::

Hata mesajı: ERR:MODE(8 bayt)

Program (9 bayt):

median({1},{0::

Hata mesajı: ERR:STAT(8 bayt)


3

Yakut, 25 bayt

Eğlenceli bir egzersizdi, teşekkürler! Muhtemelen bir SegFault ile daha kısa bir hata mesajı almanın bir yolu vardır, fakat hiçbirini bulamadım.

/\x
# Invalid hexa regexp

Hata mesajı:

a:1: invalid hex escape

Son bir yeni satır da dahil olmak üzere 24 bayt.

Çevrimiçi deneyin!

Ruby, 26 bayt

İşte önceki cevabım:

08
# No 8 allowed in octal

Hata mesajı:

a:1: Invalid octal digit

Sonunda yeni bir satır dahil olmak üzere 25 bayt.


Bence cevaplarını ayırmalısın.
Solomon Ucko

@ SolomonUcko: Herhangi bir nedenin nedeni? Zaten birçok cevap var. Sadece önceki cevabımın izini bırakmak istedim. İnsanlar genellikle bayt sayısını <s> 26 </s> 25 ile düzenler, ancak genellikle küçük değişiklikler için olur.
Eric Duminil

Aslında, neden söylediğime emin değilim, öyleyse boşuna.
Solomon Ucko

3

C ++ (macOS High Sierra beta'da), 23 karakter

int main(){*(int*)0=0;}

Çıktı: (22 karakter)

Segmentation fault: 11

MacOS'un önceki sürümlerinin daha geleneksel bir Segmentation fault (core dumped)yanıt sağlayıp sağlamadığını hatırlamıyorum, ancak bunu düzeltmek için koda boşluk eklemek oldukça önemsiz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.