Kesalahan Runtime yang Konyol [ditutup]


40

Menulis program yang menghasilkan kesalahan runtime gila, tidak jelas, konyol, atau hanya sekadar gila. Kebingungan dan golfitude (kependekan) tidak diperlukan.

  • solusi yang kelihatannya harus bekerja dengan baik lebih baik.
  • solusi yang terlihat seperti mereka harus istirahat satu cara tetapi istirahat yang lain lebih baik.
  • solusi yang tidak deterministik lebih baik selama mereka dapat diproduksi ulang.
  • solusi dengan jarak jauh antara penyebab kesalahan dan manifestasi lebih baik.
  • poin bonus untuk menghasilkan kesalahan yang seharusnya tidak mungkin.
  • poin bonus untuk kesalahan yang menyebabkan crash (seperti membuat kesalahan segmen python) atau sistem operasi.

Unit skor harus upvotes.

Adendum 1

Kelakuan buruk kompiler juga baik-baik saja.


2
Membuat Python segfault mudah:import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
marinus

Peter: whoops. Saya mengubah pertanyaan itu setengah jalan dengan menulisnya: S
Wug

... bagaimana dengan malbolge atau INTERCAL? Saya cukup yakin mereka akan memiliki beberapa kesalahan yang cukup gila, mungkin bisa melakukannya dengan char tunggal juga.
acolyte

1
Ini jelas merupakan tautan terbaik untuk solusi: destroyallsoftware.com/talks/wat :-)
seri

1

Jawaban:


69

PHP wajib (yang masih belum diperbaiki pada 5.4):

<?::

Output:

Kesalahan Parse: kesalahan sintaksis, tak terduga T_PAAMAYIM_NEKUDOTAYIM pada baris 1

Whaa?


12
Saya suka yang ini. Mungkin itu pesan kesalahan favorit saya. Terlepas dari satu kali teman saya mencoba untuk mem-boot laptop windows-nya ke partisi pemulihan, dan itu mengubah seluruh layar menjadi kotak putih dengan huruf merah raksasa ejaan "GALAT".
Wug

4
Disengaja, tetapi anehnya: "Paamayim Nekudotayim, pada awalnya, tampak seperti pilihan aneh untuk penamaan dua-titik dua. Namun, saat menulis Zend Engine 0,5 (yang mendukung PHP 3), itulah yang diputuskan oleh tim Zend untuk menyebutnya Ini sebenarnya berarti double-colon - dalam bahasa Ibrani! " php.net/manual/en/language.oop5.paamayim-nekudotayim.php
Jon Gauthier

12
@HansEngel: Ya, itu artinya double-colon dalam bahasa Ibrani. Menggunakan bahasa Inggris untuk setiap token kecuali yang ini masuk akal karena ...? Saya kira saya hanya perlu bertanya kepada tim PHP.
Ry-

Maaf kawan, tetapi Anda cukup memanggil metode statis / variabel ''(string kosong) dari kelas ''(string kosong)
Ismael Miguel

1
@ IsmaelMiguel: Ini membingungkan karena bahasa Ibrani, bukan karena itu salah.
Ry-

61

Kesalahan kompilasi Gcc:

int main()
{
        long long long a;
}

kesalahan: lama sangat lama terlalu lama untuk GCC


6
Mereka hanya tahu bahwa seseorang akan mencoba long long long, jika longdan long longkeduanya valid.
Konrad Borowski

3
Saya pikir "a terlalu panjang!" akan menjadi pesan kesalahan yang lebih baik, tetapi ini masih merupakan jawaban yang bagus.
Wug

52

Prompt Perintah Windows

If you're happy and you know it clap your hands!

Keluaran:

bahagia tak terduga saat ini.


1
Saya mencoba perintah itu untuk memeriksa hasilnya, tetapi itu ditampilkan ^V:( hari-hari yang sulit ini
Fabricio

8
@ Fabio, apakah itu hanya dengan menekan CTRL + V untuk menempelkan baris? Di Command Prompt, "pintasan" keyboard untuk tempel adalah ALT + SPACE, E, P.
Hand-E-Food

42

PHP

$ cat error.php 
<?php
function echo_string(string $string) {
    echo $string;
}
echo_string("Hello, world!");
$ php error.php 
PHP Catchable fatal error:  Argument 1 passed to echo_string() must be an instance of string, string given, called in error.php on line 5 and defined in error.php on line 2

Anda tidak dapat meneruskan string ke suatu fungsi, Anda harus melewatkan string sebagai gantinya!

Pembaruan: Kode ini BUKAN kesalahan dalam PHP 7. Arahkan pada / klik / sentuh spoiler untuk memeriksa alasannya (berisi spoiler tentang bagaimana kode bekerja).

Fitur baru yang dikenal sebagai deklarasi tipe skalar ditambahkan dalam PHP 7. Fitur ini memungkinkan penggunaan tipe skalar dalam deklarasi fungsi.


6
Apa php f ***.
Wug

7
PHP sedang berusaha mendapatkan kelas string(yang valid). Mengetik tipe (hal yang sedang Anda lakukan) hanya berfungsi untuk kelas. Karena kelas stringtidak ada, itu melempar kesalahan.
Ismael Miguel

Anda dapat memeriksa di sini kode Anda berfungsi dengan baik: sandbox.onlinephpfunctions.com/code/…
Ismael Miguel

2
@ IsmaelMiguel: Ya, saya mengerti mengapa itu terjadi, tetapi kesalahannya masih konyol menurut saya.
Konrad Borowski

1
Lalu coba array(''=>array()'').
Ismael Miguel

33

pesta

$ echo "Hello, world!"
bash: !": event not found

Dan Anda akan berpikir bahwa bash akan menerima "Halo, dunia!" program.


Penjelasan tentang ini: string yang dikirimkan dengan tanda kutip ganda saat argumen untuk program dalam bash diperluas, artinya `echo hi`berubah menjadi hibagian dalam string yang dikutip ganda. !digunakan sebagai awalan untuk perancang acara . Jadi, bash mencoba mengevaluasi !", tetapi tidak dapat menemukan acara yang dirujuk.
Mego

31

Python 2.7

# Look I'm actually coding: see my happy face?
print ':)'

Menghasilkan yang agak tidak membantu:

SyntaxError: encoding problem: with BOM

Bagaimana komentar sederhana dapat menghasilkan kesalahan?


12
Dalam juru bahasa Python terbaru: jika 2 baris pertama dimulai dengan #dan berisi string coding:kata berikutnya digunakan sebagai deskripsi pengodean
AMK

31

Mathematica

Saat menggunakan Mathematica untuk membuat output grafis, seseorang terkadang memicu pesan kesalahan yang diformat sesuai dengan spesifikasi yang digunakan dalam program itu sendiri. Ini adalah contoh sepele.

Rotate[f/0, .6]

masukkan deskripsi gambar di sini


11
Tapi itu bukan pesan kesalahan, kan? Hanya saja nilai Mathematica kembali ketika Anda membagi sesuatu dengan nol.
Ilmari Karonen

26

TI-89 Graphing Calculator

Saya menemukan ini ketika belajar tentang diferensiasi implisit dalam kalkulus sekolah menengah. Jika Anda memasukkan:

d(xy+x=0,x)

Anda mendapatkan yang berikut ini:

1 = 0

Dengan peringatan ini, dicetak dalam huruf-huruf kecil di bagian bawah layar:

Warning: May produce false equation

Ini terjadi karena xytidak diartikan sebagai x * y, melainkan simbolnya sendiri xy,.

Anehnya, jika Anda melakukannya d(xy=0,x), Anda akan mendapatkan 0 = 0peringatan yang sama.


22

Anda dapat membuat otak kompiler Haskell meledak:

C:\Windows\system32>ghci
...
Prelude> :set -XExistentialQuantification
Prelude> data Foo = forall a. Foo a
Prelude> let foo f = 1 where Foo a = f

<interactive>:4:21:
    My brain just exploded
    I can't handle pattern bindings for existential or GADT data constructors.
    Instead, use a case-expression, or do-notation, to unpack the constructor.
    In the pattern: Foo a
    In a pattern binding: Foo a = f
    In an equation for `foo':
        foo f
          = 1
          where
              Foo a = f
Prelude>

22

Rubi

Aturan penyalahgunaan.

class StandardError

  def to_s
    words = File.open('/usr/share/dict/words'){|f|f.readlines.map &:chop}.sample(100)
    words.last.capitalize!
    super.gsub(/\w+/){words.pop}
  end

  to_s(3)

end

Jika dijalankan pada OSX, hasilkan, mis

$ ruby weird_runtime_error.rb 
weird_runtime_error.rb:9:in `to_s': Sculpturation contingence explicate tappet(phonendoscope ethopoeia nannandrous) (ArgumentError)
    from weird_runtime_error.rb:9:in `<class:StandardError>'
    from weird_runtime_error.rb:1:in `<main>'

6
Apakah maksudnya itu?
TRiG

9
Artinya wrong number of arguments(1 for 0). Ini menyatakan bahwa melalui bahasa yang dihasilkan dengan malas dan stokastik menggunakan kosa kata bahasa Inggris dengan sedikit memperhatikan masuk akal linguistik.
histokrat

21

DOS Prompt

c:\>make love

Memberi anda

Fatal Error: 'love' does not exist. Don't know how to make it.

Stumbled atas ini ketika saya mencoba untuk menghina komputer saya karena tidak kooperatif. Membuat saya agak sedih untuk sementara waktu sampai saya tahu, bahwa ini hanya terjadi jika cinta tidak ada. Jika ada, dia dengan senang hati akan berhasil.


5
Ini sebenarnya didedikasikan untuk makeutilitas, bukan DOS itu sendiri.
Vovanium

1
Saya mendapatkan:make: *** No rule to make target 'love'. Stop.
agtoever

@agtoever Anda salah menjalankan.
Navin

Saya mendapatkan: make: Fatal error: Don't know how to make target 'love'tapi itu di Unix. Di DOS, saya mengerti make is not recognized as an internal or external command, operable program or batch file.
lebatsnok

17

Bash (Quine error)

Kesalahan ini adalah Quine di Bash!

$ bash: bash:: command not found...
bash: bash:: command not found...

Tentu saja Anda harus memiliki yang relevan locale(bahasa Inggris di sini).


1
Milik saya tidak mencetak ...di akhir, jadi saya harus menghilangkannya di input asli juga.
Zev Eisenberg

16

CSH

cshLelucon yang benar-benar klasik :

% make fire?
make: No match.

15

Bash - rekreasi akurat dari pesan kesalahan historis yang langka

echo -ne $(tail -n +257 /usr/src/linux*/drivers/char/lp.c | head -1 | cut -d '"' -f 2 | sed 's/%d/0/')

Keluaran:

lp0 on fire

Membutuhkan sumber kernel linux untuk dibongkar di tempat biasa.

Fakta menyenangkan: saya pernah menerima pesan ini dengan sungguh-sungguh, ketika menjalankan printer pita lama.


Apakah ini pesan kesalahan, atau hanya sebuah output dari suatu program?
yo

1
@yo 'bash one-liner itu sendiri kembali dengan sukses, tetapi output yang dihasilkannya adalah pesan kesalahan asli; skrip hanya menarik kesalahan dari sumber driver printer.
Kerusuhan

ah ok, itu hal yang sulit dilakukan :-)
yo

1
Kebetulan, kesalahan berarti terus mencetak ke kertas macet, yang merupakan bahaya kebakaran.
Yosua

13

C (++)

Jika kesalahan kompilasi waktu dihitung di sini satu (dengan asumsi file bernama "crash.c").

#include "crash.c"

int main(){ return 0; }

Ini mengisi layar dengan ini pada saat kompilasi (siapkan Ctrl-C)

                 from crash.c:1,
                 from crash.c:1:
crash.c:3:1: error: redefinition of ‘main’
crash.c:3:1: note: previous definition of ‘main’ was here
In file included from crash.c:1:0,
                 from crash.c:1,
                 from crash.c:1,

Cuplikan lain yang mengkompilasi dengan sangat baik (tidak ada peringatan di bawah -Walldan menggambarkan keamanan tipe C yang indah </s>

#include <stdio.h>
int i;

int main(){
  sprintf(NULL, "%s", (char *) (void *) (1/i));
  return 0;
}

Menjalankannya memberi:

Floating point exception (core dumped)

13

Rubi

Rasanya aneh bahwa ini bisa terjadi dalam bahasa tingkat tinggi.

$*<<$*<<$**$/

menghasilkan

ArgumentError: recursive array join

10

Ini sangat tua, tetapi bagi mereka yang ingat BCPL,

GET "LIBHDR"

LET START() = VALOF 
$8
        RESULTIS 0
$)

akan mengeluh

$8
 ^
"( ) or 8 expected"

10

R

Secara teknis ini bukan kesalahan tetapi peringatan tetapi bagaimanapun itu konyol, dan terjadi karena alasan yang sepenuhnya esoteris.

[[EDIT]] Sepertinya penyebab beberapa bagian dari peringatan lucu berada di RStudio daripada R per se, jadi itu kurang menarik daripada yang saya pikirkan. Contoh pertama yaitu plot(1:2, NotAGraphicalParameter = "ignore.me"), masih direproduksi dalam huruf "telanjang" R dan cukup lucu sendiri. [[/ EDIT]]

> plot(1:2, NotAGraphicalParameter = "ignore.me")
# produces a nice scatterplot with two points, [1,1] and [2,2]
Warning messages:
1: In plot.window(...) :
  "NotAGraphicalParameter" is not a graphical parameter
2: In plot.xy(xy, type, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
3: In axis(side = side, at = at, labels = labels, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
4: In axis(side = side, at = at, labels = labels, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
5: In box(...) : "NotAGraphicalParameter" is not a graphical parameter
6: In title(...) : "NotAGraphicalParameter" is not a graphical parameter
> plot(2:3)
# another nice scatterplot: [2,2] and [3,3] 
# but there should be nothing wrong this time!
# however ...
There were 12 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: "NotAGraphicalParameter" is not a graphical parameter
2: "NotAGraphicalParameter" is not a graphical parameter
3: "NotAGraphicalParameter" is not a graphical parameter
4: "NotAGraphicalParameter" is not a graphical parameter
5: "NotAGraphicalParameter" is not a graphical parameter
6: "NotAGraphicalParameter" is not a graphical parameter
7: "NotAGraphicalParameter" is not a graphical parameter
8: "NotAGraphicalParameter" is not a graphical parameter
9: "NotAGraphicalParameter" is not a graphical parameter
10: "NotAGraphicalParameter" is not a graphical parameter
11: "NotAGraphicalParameter" is not a graphical parameter
12: "NotAGraphicalParameter" is not a graphical parameter
# but let's try once more:
> plot(2:3)
# yup. no warnings this time. we had to do it twice

Ini seperti R mengingat penghinaan kami. Tapi tidak lama.

Saya tidak bisa menjelaskan mengapa ini terjadi - tetapi ini bisa direproduksi Sebenarnya itu terjadi setiap kali Anda memberikan beberapa "bukan parameter grafis" untuk plot 1, dan kemudian melakukan plot 2 dengan cara yang benar-benar sempurna. Sangat lucu bahwa kita mendapatkan peringatan 12 "bukan parameter grafis" untuk plot kedua tetapi hanya 6 untuk yang pertama. Hal lucu lainnya adalah bahwa jika Anda memberikan "bukan parameter grafis" dengan nilai NULL maka tidak ada kondisi yang dilemparkan:

plot(1:2, Nonsense=NULL)
# no warnings
# however
plot(1:2, Nonsense="gibberish")
# gives the usual 6-pack of warnings

Dan untuk menjadi lebih konyol, mari kita menggambar beberapa baris di atas plot yang telah digambar sebelumnya:

plot(1:2)
# you will see the number of warnings growing with each line:
lines(1:2, 1:2, mumbo = 1)
lines(1:2, 1:2, jumbo = 2)
lines(1:2, 1:2, bimbo = 3)
lines(1:2, 1:2, cucaracha = 4)
lines(1:2, 1:2, karaoke = 5)
lines(1:2, 1:2, radiogaga = 6)
lines(1:2, 1:2, reptiles = 7)
lines(1:2, 1:2, cowsonmoon = 8)
lines(1:2, 1:2, stainlessSteelLadderToTheMoon = 9)
lines(1:2, 1:2, frambuesa = 10)
lines(1:2, 1:2, fresa = 11)
lines(1:2, 1:2, limonYNada = 12)
lines(1:2, 1:2, slingsAndArrows = 13)
# ... and now you have 25 warnings:
warnings()

Warning messages:
1: "mumbo" is not a graphical parameter
2: "jumbo" is not a graphical parameter
3: "bimbo" is not a graphical parameter
4: "cucaracha" is not a graphical parameter
5: "karaoke" is not a graphical parameter
6: "radiogaga" is not a graphical parameter
7: "reptiles" is not a graphical parameter
8: "cowsonmoon" is not a graphical parameter
9: "stainlessSteelLadderToTheMoon" is not a graphical parameter
10: "frambuesa" is not a graphical parameter
11: "fresa" is not a graphical parameter
12: "limonYNada" is not a graphical parameter
13: "mumbo" is not a graphical parameter
14: "jumbo" is not a graphical parameter
15: "bimbo" is not a graphical parameter
16: "cucaracha" is not a graphical parameter
17: "karaoke" is not a graphical parameter
18: "radiogaga" is not a graphical parameter
19: "reptiles" is not a graphical parameter
20: "cowsonmoon" is not a graphical parameter
21: "stainlessSteelLadderToTheMoon" is not a graphical parameter
22: "frambuesa" is not a graphical parameter
23: "fresa" is not a graphical parameter
24: "limonYNada" is not a graphical parameter
25: In plot.xy(xy.coords(x, y), type = type, ...) :
  "slingsAndArrows" is not a graphical parameter

Ini seharusnya tidak Menangkan banyak waktu kecuali tidak ada keadilan.


1
Versi R apa yang Anda gunakan? Karena saya tidak bisa mereproduksi paket peringatan yang Anda dapatkan plot(2:3)setelah menggunakannya plot(1:2, NotAGraphicalParameter = "ignore.me"). Apakah Anda mendefinisikan ulang sesuatu di Anda .Rprofile?
plannapus

1
Sepertinya ini khusus untuk menjalankan R di Rstudio (baik di Windows dan Ubuntu) tetapi tidak terjadi ketika Anda menjalankan R di terminal linux atau windows Rgui.
lebatsnok

Saya pikir saya telah melihat sesuatu yang mirip dengan fungsi pemodelan (lm atau glm) tanpa Rstudio tetapi tidak dapat mereproduksinya sekarang. (Yaitu, peringatan sebelumnya muncul ketika tidak relevan lagi.)
lebatsnok

9

Script Perintah Windows

PERINGATAN, ini adalah bom fork!

Ini akan menghasilkan pertanyaan sampah tentang berhenti jika Anda mencoba keluar dari konsol dengan cara apa pun.

%0|%0|%0

Bonus:

  • Akan membuat sistem tidak dapat digunakan sampai restart
  • Mencegah keluar dari skrip, yang seharusnya tidak mungkin

2
Bahaya Will Robinson?
Jacob

7

q menghina kamu

q)`u#1 1
'u-fail
q)

`` `u #` `memberi tahu qbahwa setiap elemen dalam daftar adalah unik (sehingga ia dapat membangun semacam indeks berbasis hash, mungkin). inilah yang terjadi padahal sebenarnya tidak benar.


1
Apa bahasanya? Saya mencoba mencari bahasa "q menghina Anda", tetapi saya tidak dapat menemukan apa pun.
Konrad Borowski

Maaf karena tidak sengaja samar, bahasanya adalah [q] ( en.m.wikipedia.org/wiki/… . Ia juga berfungsi di k4, BTW.
Aaron Davies

6

Bagaimana dengan kesalahan pengoptimalan kompiler:

#include <stdio.h>

#define N 4

int main(void)
{
    int sum;
    int i;
    int arr[N];

    for (i = 0, sum = 0; i < N; i++, arr[i] = sum) {
        sum += arr[i];
    }
    printf("%d\n", sum);
    return 0;
}

Ini khusus untuk gcc> = 4.7. Kompilasi dan berjalan dengan baik gcc -O0 -Wall. Mengkompilasi dengan gcc -O2 -Walltetapi menghasilkan inf-loop.

Perhatikan juga, bagaimana gcc melihat masalah untuk yang lebih kecil N, misalnya N = 3:

test.c:11:38: warning: array subscript is above array bounds [-Warray-bounds]
  for (i = 0, sum = 0; i < N; i++, arr[i] = sum) {
                                       ^
test.c:12:13: warning: 'arr[0]' is used uninitialized in this function [-Wuninitialized]
  sum += arr[i];
         ^

Btw, ini telah diambil dari laporan bug, saya tidak dapat mengingat nomor bugnya.


3
Nah, ini adalah perilaku yang tidak terdefinisi, sehingga kompiler diperbolehkan untuk melakukan apa saja. Tetapi masih terasa aneh bahwa kompiler memutuskan untuk mengubah tugas di luar array lokal yang tidak pernah digunakan, dan penggunaan nilai yang tidak dideklarasikan ke loop tak terbatas, bahkan jika standar C memungkinkan ini (setelah semua, itu tergantung pada perilaku yang tidak ditentukan - mengakses arr[N](di luar array), dan mengakses arr[0](yang tidak diinisialisasi)). Karena apa pun diperbolehkan untuk perilaku yang tidak terdefinisi, ini bukan kesalahan pengoptimalan, tetapi sangat tidak mungkin yang diinginkan pengguna.
Konrad Borowski

4
Ini secara eksplisit bukan kesalahan optimisasi kompiler. UB adalah UB, dan kompilernya akan benar bahkan jika itu memutuskan untuk menghapus semua data Anda dari hard drive Anda.
H2CO3

5

Saya selalu menyukai keanehan ini di APL:

      ⍝ jelas kesalahan sintaksis
      {(]} 3  
KESALAHAN SINTAKS
      {(]} 3

      ⍝ tetapi:
      {(]} 1 ÷ 0
KESALAHAN DOMAIN
      {(]} 1 ÷ 0 

      ⍝ bahkan berfungsi dengan fungsi yang ditentukan secara statis
      ∇z ← fx
[1] z ← [{]} x
[2] ∇
      f 1 ÷ 0
KESALAHAN DOMAIN
      f 1 ÷ 0
     ∧
      f 3
KESALAHAN SINTAKS
f [1] z ← [{]} x     

Itu mem-parsing bagian dalam fungsi malas!


4

PHP

<?php
[][] = 42;

[]digunakan untuk mendorong elemen. Namun, jika Anda menggunakannya untuk array literal, PHP membuat pesan kesalahan gila, bahkan jika Anda menetapkannya untuk mendorong. Membutuhkan PHP> = 5.4, seperti sebelumnya bahwa Anda tidak dapat memiliki literal array yang diindeks.

Keluaran:

Kesalahan fatal : Tidak dapat menggunakan [] untuk membaca di [...] [...] pada baris 2


4

Python

Blok bersarang

for a in range(26):
 for b in range(26):
  for c in range(26):
   for d in range(26):
    for e in range(26):
     for f in range(26):
      for g in range(26):
       for h in range(26):
        for i in range(26):
         for j in range(26):
          for k in range(26):
           for l in range(26):
            for m in range(26):
             for n in range(26):
              for o in range(26):
               for p in range(26):
                for q in range(26):
                 for r in range(26):
                  for s in range(26):
                   for t in range(26):
                    for u in range(26):
                     for v in range(26):
                      for w in range(26):
                       for x in range(26):
                        for y in range(26):
                         for z in range(26):
                          print a

Python 2.7: SystemError: too many statically nested blocks

Daftar referensi-sendiri

def printList(myList):
    for element in myList:
        if isinstance(element, list):
            printList(myList)
        else:
            print(element)

a = []
a.append(a)
printList(a)

Python 2.7

Benar bukan konstanta

Masalah dalam contoh berikut adalah bahwa dalam Python 2.7, Truedan Falsebukan konstanta. Dan Truedan Falsedapat secara otomatis dicor ke 1dan 0:

True=False
a=10/True

Traceback (most recent call last):
  File "/home/moose/.config/pluma/tools/new-tool-2", line 11, in <module>
    exec(sys.stdin.read())
  File "<string>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero

Python 2.7:

Niat

def f(n):
    if n <= 1:
        return n
    else:
        return f(n-1)+f(n-2)

Apakah Anda mendapatkan kesalahan?

Traceback (most recent call last):
  File "/home/moose/.config/pluma/tools/new-tool-2", line 11, in <module>
    exec(sys.stdin.read())
  File "<string>", line 4
    else:
       ^
SyntaxError: invalid syntax

Mencampur tab dan spasi ok di Python 2.7 ... tapi ingat tingkat indentasi!


1
Contoh ruang pencampur dan tabulator tidak berfungsi dengan benar, karena platform Stack Exchange tidak mengizinkan tabulator dalam kode.
Konrad Borowski

@fix: Ok, tapi saya pikir orang-orang yang membaca ini mengerti. Kebanyakan editor juga tidak menunjukkan spasi / tab (kecuali untuk spasi kosong) dan jika mereka menunjukkannya, sebagian besar waktu akan berwarna abu-abu. Dan dalam setiap bahasa lain (kecuali untuk spasi putih) spasi putih tidak masalah, selama setidaknya ada satu.
Martin Thoma

Anda harus menulis program Anda dalam bahasa pemrograman Whitespace.
Alexander

Apakah Python 3 itu lelucon?
Ry-

@minitech saya tidak tahu. Itulah yang seharusnya dilakukan print a.
Justin

3

Saya akan mulai:

#include <iostream>

using namespace std;

class A
{
public:
    A()
    {
    }

    void doSomethingDiabolical()
    {
        delete this;
    }

    virtual void breakHorribly()
    {
        cout << "still alive" << endl;
        doSomethingDiabolical();
        cout << "still alive" << endl;
    }
};

class B : public A
{
public:
    B() : A()
    {
    }

    void breakHorribly()
    {
        cout << "still alive" << endl;
        ((A *) this)->breakHorribly();
        cout << "still alive" << endl;
        doSomethingDiabolical();
        cout << "still alive" << endl;
        breakHorribly();
        cout << "dead" << endl;
    }
};

int main()
{
    jane();
}

void jane()
{
    cout << "still alive" << endl;
    A * o = new B;
    cout << "still alive" << endl;
    o->breakHorribly();
}

Adakah tebakan mengapa program ini macet? : D

Lihat janejalankan: http://ideone.com/gtaZ3


1
Bukankah ini rekursi tak terbatas yang agak langsung? B::BreakHorriblypanggilan itu sendiri sebelumnya doSomethingDiabolicaldisebut, jadi delete thistidak pernah tercapai.
marinus

Program ini meledak karena sejumlah alasan. Perilakunya berubah jika Anda menghapus pernyataan cetak yang berbeda. Namun, Anda benar. Saya tidak punya waktu untuk mereproduksi perilaku tidak terdefinisi yang pernah saya miliki, tapi akhirnya saya mendapatkan panggilan fungsi virtual murni saat runtime.
Wug

2
Anda tidak mengatakan Anda pernah mengetik sesuatu seperti tidak sengajadelete this , bukan?
Berhenti menghidupkan counterclockwis

Tidak, itu jauh lebih halus dari itu, tetapi hasil akhirnya sama: seorang destruktor dipanggil untuk kelas selama eksekusi fungsi anggota
Wug

3

Pesta

Saya mendapatkan ini hari ini ketika saya mencoba mencari tahu apakah mungkin untuk melindungi sistem dari rm -rf /.

mkdir /tmp/a
mkdir /tmp/a/b
sudo mount --bind /tmp/a /tmp/a/b
rm -rf /tmp/a

Pesan kesalahan dengan LANG=C:

rm: WARNING: Circular directory structure.
This almost certainly means that you have a corrupted file system.
NOTIFY YOUR SYSTEM MANAGER.
The following directory is part of the cycle:
  '/tmp/a/b'

Peringatan ini datang dari rm, bukan bash. Tidak yakin bahasa apa yang harus Anda nyatakan dalam judul, mengingat Anda menggunakannya bashuntuk mengaturnya.

2

R

Satu lagi yang tidak konyol dan, sekali lagi, peringatan daripada kesalahan, tapi tetap menyenangkan:

> sapply(as.list(-1:-51), log)
 [1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[20] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[39] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
There were 50 or more warnings (use warnings() to see the first 50)

Saya suka bit terakhir: 50 atau lebih :)

Dan peringatan yang sebenarnya:

1: In lapply(X = X, FUN = FUN, ...) : NaNs produced
2: In lapply(X = X, FUN = FUN, ...) : NaNs produced
....
50: In lapply(X = X, FUN = FUN, ...) : NaNs produced

MENYENANGKAN = MENYENANGKAN!


1
Kode Nyan ?! Ya, itu memang aneh!
Kroltan

Saya tidak melihat apa yang tidak terduga atau mengejutkan. log dari produk negatif Not A Number (NaN) sebagaimana mestinya.
plannapus

2

CPython

import ctypes
import sys
(ctypes.c_char * sys.getsizeof(None)).from_address(id(None))[:4] = '\x00' * 4

Hasil:

Fatal Python error: deallocating None

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Bahkan lebih baik di Python 3: ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None)).
kirbyfan64sos

2

Bash - kegagalan melarikan diri yang berlawanan dengan intuisi

echo "this should definitely work!!!11!"

kembali

-bash: !11: event not found

(Ekspansi riwayat pada commandline tidak dicegah dengan tanda kutip ganda)

Bonus:

echo "I don't know what's gone wrong!! !echo is usually pretty foolproof!-1"

Outputnya tidak seperti yang diharapkan. Tekan up untuk mendapatkan perintah lagi, dan pemberitahuan itu berubah dari apa yang Anda ketik. Jika Anda menekan dan memasukkan beberapa kali, kemungkinan output Anda akan mulai terlihat agak mengerikan. Cobalah sendiri.


2
Jawaban ini adalah duplikat dari codegolf.stackexchange.com/a/17776 .
Dennis

2

C # - Generator Fibonacci rekursif dan malas

static void Main()
{
    Console.WriteLine(string.Join(",", fib().Take(141)));
    Console.ReadLine();
}

static IEnumerable<decimal> fib(decimal n = 0, decimal m = 1)
{
    if (n == 0)
    {
        yield return 0;
        yield return 1;
    }
    while (true)
    {
        yield return n + m;
        foreach(var x in fib(m, n+m))
        {
            yield return x;
        }
    }
}

Kode ini terlihat baik-baik saja, bukan? Generator Fibonacci yang cukup sederhana, dibumbui dengan beberapa rekursi dan penghitungan malas. Harus bekerja

Nggak! Menjalankan ini akan menyebabkan OverflowException. Ini karena kita menggunakan desimal, dan angka Fibonacci 141 (~ 8.1E28) melebihi nilai maksimum desimal (~ 7.9E28).

Int, namun tidak melempar OverflowException ketika Anda melebihi nilai maksimumnya. Sebaliknya, seperti yang diharapkan, meluap ke nilai negatif. Jadi, jika kita ganti int bukan dengan desimal, seperti dalam kode berikut, itu akan berfungsi, bukan?

static void Main()
{
    Console.WriteLine(string.Join(",", fib().Take(141)));
    Console.ReadLine();
}

static IEnumerable<int> fib(int n = 0, int m = 1)
{
    if (n == 0)
    {
        yield return 0;
        yield return 1;
    }
    while (true)
    {
        yield return n + m;
        foreach(var x in fib(m, n+m).ToList())
        {
            yield return x;
        }
    }
}

Jika Anda membaca kode itu harus jelas mengapa ini tidak akan berhasil. Jika Anda tidak ... Saya tidak hanya mengubah jenis dari desimal ke int; Saya juga menyelinap dalam panggilan ke ToList () dalam pernyataan foreach. Ini akan memaksa pencacah dikembalikan untuk dievaluasi dengan penuh semangat. Ini tidak akan menyebabkan 141 rekursi, melainkan jumlah rekursi yang tak terbatas. Sebenarnya, jauh sebelum mencapai tak terhingga tentu saja akan meluap stack, menyebabkan runtime untuk melempar StackOverflowException. (bonus: pengecualian ini tidak dapat ditangkap, sehingga akan merusak runtime)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.