Lächerliche Laufzeitfehler [geschlossen]


40

Schreiben Sie Programme, die verrückte, obskure, lächerliche oder einfach nur verrückte Laufzeitfehler erzeugen. Verschleierung und Golf (Shortness) nicht erforderlich.

  • Lösungen, die so aussehen, als ob sie gut funktionieren sollten, sind besser.
  • lösungen, die so aussehen, als ob sie auf die eine und auf die andere weise brechen sollten, sind besser.
  • Nicht deterministische Lösungen sind besser, solange sie manchmal reproduzierbar sind.
  • Lösungen mit großer Entfernung zwischen Fehlerursache und Manifestation sind besser.
  • Bonuspunkte für Fehler, die unmöglich sein sollten.
  • Bonuspunkte für Fehler, die die Laufzeit zum Absturz bringen (z. B. Python-Segmentfehler) oder das Betriebssystem.

Die Einheit der Punktzahl sind Aufwertungen.

Anhang 1

Fehlverhalten des Compilers ist ebenfalls in Ordnung.


2
Python segfault durchzuführen ist einfach:import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
marinus

Peter: Hoppla. Ich habe die Frage
Wug

... was ist mit malbolge oder INTERCAL? Ich bin mir ziemlich sicher, dass sie einige ziemlich verrückte Fehler haben würden, wahrscheinlich können sie das auch mit einem einzigen Char.
Akolyth

1
Dies ist definitiv der beste Link für die Lösung: destroyallsoftware.com/talks/wat :-)
seri

Antworten:


69

Das obligatorische PHP (das seit 5.4 noch nicht behoben ist):

<?::

Ausgänge:

Analysefehler: Syntaxfehler, unerwarteter T_PAAMAYIM_NEKUDOTAYIM in Zeile 1

Was?


12
Ich mag dieses. Es könnte meine Lieblingsfehlermeldung sein. Abgesehen davon, dass mein Freund einmal versucht hatte, seinen Windows-Laptop über die Wiederherstellungspartition hochzufahren, verwandelte er den gesamten Bildschirm in eine weiße Box mit riesigen roten Buchstaben, die "ERROR" buchstabierten.
Wug

4
Absichtlich, aber dennoch seltsam: "Paamayim Nekudotayim scheint zunächst eine seltsame Wahl für die Benennung eines Doppelpunkts zu sein. Während das Zend Engine 0.5 (das PHP 3 unterstützt) geschrieben wurde, hat das Zend-Team beschlossen, es so zu bezeichnen Es bedeutet eigentlich Doppelpunkt - auf Hebräisch! " php.net/manual/en/language.oop5.paamayim-nekudotayim.php
Jon Gauthier

12
@ HansEngel: Ja, auf Hebräisch bedeutet das Doppelpunkt. Mit Ausnahme dieses Tokens ist es sinnvoll, für jedes Token Englisch zu verwenden, weil ...? Ich denke, ich muss nur das PHP-Team fragen.
Ry

Sorry, Alter, aber du rufst einfach die statische Methode / Variable ''(leere Zeichenfolge) aus der Klasse ''(leere Zeichenfolge)
Ismael Miguel

1
@IsmaelMiguel: Es ist verwirrend wegen des Hebräischen, nicht weil es falsch ist.
Ry

61

Gcc-Kompilierungsfehler:

int main()
{
        long long long a;
}

Fehler: long long long ist zu lang für GCC


6
Sie wussten nur, dass jemand es versuchen wird long long long, wenn longund long longbeide gültig sind.
Konrad Borowski

3
Ich denke "a ist zu lang!" wäre eine bessere fehlermeldung gewesen, aber das ist immer noch eine tolle antwort.
Wug

52

Windows-Eingabeaufforderung

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

Ausgabe:

glücklich war zu diesem Zeitpunkt unerwartet.


1
Ich habe diesen Befehl ausprobiert, um das Ergebnis zu überprüfen, aber er zeigte an ^V:( Harte Tage diese
Fabricio

8
@ Fabricio, war das nur durch Drücken von STRG + V, um die Zeile einzufügen? In der Eingabeaufforderung lautet die Tastenkombination für Einfügen ALT + LEERTASTE, 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

Sie können einer Funktion keinen String übergeben, Sie müssen stattdessen einen String übergeben!

Update: Dieser Code ist KEIN Fehler in PHP 7. Bewegen Sie den Mauszeiger über einen Spoiler, um zu überprüfen, warum (enthält Spoiler über die Funktionsweise des Codes).

In PHP 7 wurde eine neue Funktion hinzugefügt, die als skalare Typdeklarationen bekannt ist . Mit dieser Funktion können skalare Typen in Funktionsdeklarationen verwendet werden.


6
Was zum Teufel?
Wug

7
PHP versucht, die Klasse string(die gültig ist) zu bekommen. Tipping (das, was Sie tun) funktioniert nur für Klassen. Da die Klasse stringnicht existiert, wird ein Fehler ausgegeben.
Ismael Miguel

Sie können hier überprüfen, ob Ihr Code ordnungsgemäß funktioniert: sandbox.onlinephpfunctions.com/code/…
Ismael Miguel

2
@IsmaelMiguel: Ja, ich verstehe, warum es passiert, aber der Fehler ist meiner Meinung nach immer noch lächerlich.
Konrad Borowski

1
Dann versuche es array(''=>array()'').
Ismael Miguel

33

Bash

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

Und Sie würden denken, dass Bash ein einfaches "Hallo, Welt!" Programm.


Erklärung: Zeichenfolgen, die in doppelten Anführungszeichen als Argumente für Programme in Bash übergeben werden, werden erweitert, was bedeutet, dass sie `echo hi`in die Zeichenfolge in doppelten Anführungszeichen eingeschlossen werden hi. !wird als Präfix für Ereignisbezeichner verwendet . Daher versucht bash auszuwerten !", kann das Ereignis, auf das verwiesen wird, jedoch nicht finden.
Mego

31

Python 2.7

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

Generiert die eher wenig hilfreichen:

SyntaxError: encoding problem: with BOM

Wie kann ein einfacher Kommentar einen Fehler erzeugen?


12
In den neuesten Python-Interpreten: Wenn die ersten beiden Zeilen mit einem #String beginnen und das coding:nächste Wort als Codierungsbeschreibung enthalten
AMK

31

Mathematica

Wenn Sie mit Mathematica eine grafische Ausgabe erstellen, werden manchmal Fehlermeldungen ausgelöst, die gemäß den im Programm selbst verwendeten Spezifikationen formatiert sind. Hier ist ein triviales Beispiel.

Rotate[f/0, .6]

Bildbeschreibung hier eingeben


11
Das ist aber eigentlich keine Fehlermeldung, oder? Es ist nur der Wert, den Mathematica zurückgibt, wenn Sie etwas durch Null teilen.
Ilmari Karonen

26

TI-89 Grafikrechner

Ich entdeckte dies, als ich etwas über implizite Differenzierung in der Hochschulrechnung lernte. Wenn Sie Folgendes eingeben:

d(xy+x=0,x)

Sie erhalten folgendes:

1 = 0

Mit dieser Einschränkung, die in winzigen Buchstaben am unteren Rand des Bildschirms gedruckt wird:

Warning: May produce false equation

Dies geschieht, weil xynicht als x * y, sondern als eigenes Symbol interpretiert wird xy.

Seltsamerweise erhalten d(xy=0,x)Sie in diesem Fall 0 = 0dieselbe Warnung.


22

Sie können das Gehirn des Haskell-Compilers explodieren lassen:

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

Rubin

Regeln Missbrauch.

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

Wenn unter OSX ausgeführt, erzeugt z

$ 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
Was um alles in der Welt bedeutet das?
TRiG

9
Es bedeutet wrong number of arguments(1 for 0). Es drückt dies durch eine Sprache aus, die träge und stochastisch mit englischem Vokabular erzeugt wird, ohne auf sprachliche Plausibilität Rücksicht zu nehmen.
Histokrat

21

DOS-Eingabeaufforderung

c:\>make love

gibt Ihnen

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

Ich bin darauf gestoßen, als ich versuchte, meinen Computer für seine mangelnde Zusammenarbeit zu beleidigen. Hat mich eine Weile traurig gemacht, bis ich herausfand, dass das nur passiert, wenn es keine Liebe gibt. Wenn es existiert, wird er es gerne schaffen.


5
Dies ist eigentlich dem makeDienstprogramm gewidmet, nicht DOS selbst.
Vovanium

1
Ich bekomme:make: *** No rule to make target 'love'. Stop.
immer

@agtoever Du läufst die falsche Marke.
Navin

Ich verstehe: make: Fatal error: Don't know how to make target 'love'aber das ist unter Unix. Unter DOS verstehe ich make is not recognized as an internal or external command, operable program or batch file.
Lebatsnok

17

Bash (Quine Fehler)

Dieser Fehler ist ein Quine in Bash!

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

Natürlich müssen Sie die entsprechenden locale(englisch hier) haben.


1
Meins hat das ...am Ende nicht gedruckt , also musste ich es auch in der ursprünglichen Eingabe weglassen.
Zev Eisenberg

16

CSH

Ein wirklich klassischer cshWitz:

% make fire?
make: No match.

15

Bash - genaue Neuerstellung einer seltenen historischen Fehlermeldung

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

Ausgabe:

lp0 on fire

Erfordert, dass die Linux-Kernel-Quelle an der üblichen Stelle entpackt wird.

Witzige Tatsache: Ich habe diese Nachricht einmal ernsthaft erhalten, als ich einen alten Farbbanddrucker betrieb.


Ist es eine Fehlermeldung oder nur eine Ausgabe eines Programms?
Du

1
@yo 'der Bash-Einzeiler selbst kehrt erfolgreich zurück, aber die Ausgabe, die er erzeugt, ist eine echte Fehlermeldung; Das Skript ruft den Fehler einfach aus der Druckertreiberquelle ab.
Aufstand

ah ok, das ist eine heikle Sache zu tun :-)
yo‘

1
Im Übrigen bedeutet der Fehler, dass weiterhin auf einem Papierstau gedruckt wird, was eine Brandgefahr darstellt.
Joshua

13

C (++)

Wenn Fehler bei der Kompilierung auftreten, handelt es sich um einen Fehler (vorausgesetzt, es handelt sich um eine Datei mit dem Namen "crash.c").

#include "crash.c"

int main(){ return 0; }

Beim Kompilieren füllt es den Bildschirm damit (Strg-C bereithalten)

                 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,

Ein weiteres Snippet, das sich perfekt kompilieren lässt (keine Warnungen unter -Wallund illustriert die schöne Typensicherheit von C </ s>

#include <stdio.h>
int i;

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

Laufen gibt es:

Floating point exception (core dumped)

13

Rubin

Ich finde es seltsam, dass dies in einer Hochsprache passieren kann.

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

produziert

ArgumentError: recursive array join

10

Dies ist sehr alt, aber für diejenigen, die sich an BCPL erinnern,

GET "LIBHDR"

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

würde mich beschweren

$8
 ^
"( ) or 8 expected"

10

R

Dies ist technisch gesehen kein Fehler, sondern eine Warnung, aber es ist trotzdem lächerlich und tritt aus völlig esoterischen Gründen auf.

[[EDIT]] Es scheint, dass die Ursache einiger Teile der lustigen Warnungen eher in RStudio als in R per se liegt, also ist es weniger interessant, als ich zuerst gedacht habe. Das erste Beispiel, dh, plot(1:2, NotAGraphicalParameter = "ignore.me")ist in "nacktem" R immer noch reproduzierbar und für sich genommen schon witzig genug. [[/ 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

Es ist, als würde sich R an unsere Beleidigungen erinnern. Aber nicht lange.

Ich kann nicht wirklich erklären, warum das passiert - aber es ist reproduzierbar. Tatsächlich tritt es jedes Mal auf, wenn Sie dem Diagramm 1 einen "nicht grafischen Parameter" zuweisen und dann ein Diagramm 2 auf absolut einwandfreie Weise erstellen. Es ist besonders lustig, dass wir 12 Warnungen "kein grafischer Parameter" für den zweiten Plot erhalten, sondern nur 6 für den ersten. Eine andere lustige Sache ist, dass, wenn Sie "keinen grafischen Parameter" mit dem Wert NULL angeben, keine Bedingung ausgelöst wird:

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

Und um noch lächerlicher zu werden, zeichnen wir ein paar Linien über den zuvor gezeichneten Plot:

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

Das sollte nicht Gewinnen Sie viel, es sei denn, es gibt keine Gerechtigkeit.


1
Welche Version von R verwenden Sie? Weil ich die Warnungssammlung, die Sie plot(2:3)gleich nach der Verwendung erhalten, nicht reproduzieren kann plot(1:2, NotAGraphicalParameter = "ignore.me"). Haben Sie etwas in Ihrem neu definiert .Rprofile?
Plannapus

1
sieht so aus, als ob dies spezifisch für das Ausführen von R in Rstudio ist (sowohl unter Windows als auch unter Ubuntu), aber es tritt nicht auf, wenn Sie R in einem Linux-Terminal oder in Windows Rgui ausführen.
Lebatsnok

Ich glaube, ich habe etwas Ähnliches mit Modellierungsfunktionen (lm oder glm) ohne Rstudio gesehen, kann es aber jetzt nicht reproduzieren. (Das heißt, frühere Warnungen wurden
ausgegeben

9

Windows-Befehlsskript

ACHTUNG, das ist eine Gabelbombe!

Dadurch werden Müllfragen zum Beenden ausgegeben, wenn Sie versuchen, die Konsole auf irgendeine Weise zu beenden.

%0|%0|%0

Boni:

  • Macht das System bis zum Neustart so gut wie unbrauchbar
  • Verhindert das Beenden des Skripts, was unmöglich sein sollte

2
Gefahr wird Robinson?
Jacob

7

q beleidigt dich

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

`` `u #` `sagt, qdass jedes Element in einer Liste eindeutig ist (so dass es vermutlich eine Art Hash-basierten Index erstellen kann). Das passiert, wenn es nicht stimmt.


1
Was ist die Sprache? Ich habe versucht, nach der Sprache "q beleidigt dich" zu suchen, aber ich konnte nichts finden.
Konrad Borowski

Die Sprache ist [q] ( en.m.wikipedia.org/wiki/… . Sie funktioniert auch in k4, übrigens.
Aaron Davies

6

Wie wäre es mit Compiler-Optimierungsfehlern:

#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;
}

Dies ist spezifisch für gcc> = 4.7. Kompiliert und läuft gut mit gcc -O0 -Wall. Kompiliert mit gcc -O2 -Wall, führt aber zu einer Inf-Schleife.

Beachte auch, wie gcc das Problem für kleinere sieht N, zB 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];
         ^

Übrigens wurde dies einem Fehlerbericht entnommen, aber ich kann mich nicht an die Fehlernummer erinnern.


3
Nun, dies ist undefiniertes Verhalten, daher darf der Compiler alles tun. Trotzdem ist es merkwürdig, dass der Compiler beschlossen hat, eine Zuweisung außerhalb des nie verwendeten lokalen Arrays zu ändern und einen nicht deklarierten Wert in eine Endlosschleife umzuwandeln, auch wenn der C-Standard dies zulässt (schließlich hängt dies von undefiniertem Verhalten ab). Zugriff arr[N](außerhalb des Arrays) und Zugriff arr[0](der nicht initialisiert ist). Da für undefiniertes Verhalten alles zulässig ist, handelt es sich nicht um einen Optimierungsfehler, sondern höchstwahrscheinlich um den vom Benutzer gewünschten Fehler.
Konrad Borowski

4
Dies ist ausdrücklich kein Fehler bei der Compiler-Optimierung. UB ist UB, und der Compiler wäre auch dann richtig, wenn er alle Ihre Daten von Ihrer Festplatte löschen würde.
H2CO3

5

Ich habe diese Verrücktheit in APL immer gemocht:

      ⍝ offensichtlich ein Syntaxfehler
      { (] } 3  
SYNTAX-FEHLER
      {(]}3

      ⍝ aber:
      {(]} 1 ÷ 0
DOMAIN-FEHLER
      {(]} 1 ÷ 0 

      ⍝ Es funktioniert sogar mit statisch definierten Funktionen
      ∇z ← fx
[1] z ← [{]} x
[2] ∇
      f 1 ≤ 0
DOMAIN-FEHLER
      f 1 ≤ 0
     ∧
      f 3
SYNTAX-FEHLER
f [1] z ← [{]} x     

Es analysiert das Innere von Funktionen träge!


4

PHP

<?php
[][] = 42;

[]wird verwendet, um Elemente zu schieben. Wenn Sie es jedoch für Array-Literal verwenden, macht das PHP eine verrückte Fehlermeldung, auch wenn Sie es zuweisen, um zu pushen. Benötigt PHP> = 5.4, da zuvor Array-Literale nicht indiziert werden konnten.

Ausgabe:

Schwerwiegender Fehler : [] kann nicht zum Einlesen von [...] [...] in Zeile 2 verwendet werden


4

Python

Verschachtelte Blöcke

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

Selbstreferenzierende Listen

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

Wahr ist keine Konstante

Das Problem in dem folgende Beispiel ist , dass in Python 2.7, Trueund Falsesind keine Konstanten. Und Trueund Falsekönnen automatisch umgewandelt werden in 1und 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:

Absicht

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

Bekommst du den fehler

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

Das Mischen von Tabulatoren und Leerzeichen war in Python 2.7 in Ordnung. Beachten Sie jedoch die Einrückungsstufe!


1
Das Beispiel zum Mischen von Leerzeichen und Tabulatoren funktioniert nicht ordnungsgemäß, da die Stack Exchange-Plattform keine Tabulatoren im Code zulässt.
Konrad Borowski

@ xfix: Ok, aber ich denke, Leute, die dies lesen, verstehen es. Die meisten Editoren zeigen auch keine Leerzeichen / Tabulatoren an (mit Ausnahme von nachgestellten Leerzeichen), und wenn sie es anzeigen, ist es meistens grau. Und in jeder anderen Sprache (mit Ausnahme von Leerzeichen) spielen Leerzeichen keine Rolle, solange mindestens eine vorhanden ist.
Martin Thoma

Sie sollten Ihre Programme in der Programmiersprache Whitespace schreiben.
Alexander

Ist der Python 3 ein Witz?
Ry

@minitech Ich habe keine Ahnung. Das ist es, womit es tun soll print a.
Justin

3

Ich fange an:

#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();
}

Irgendwelche Vermutungen, warum dieses Programm abstürzt? : D

Siehe janerun: http://ideone.com/gtaZ3


1
Ist das nicht eine ziemlich einfache unendliche Rekursion? B::BreakHorriblyruft sich vorher an doSomethingDiabolical, wird also delete thisnie erreicht.
Marinus

Dieses Programm explodiert aus einer Vielzahl von Gründen. Das Verhalten ändert sich, wenn Sie andere Druckanweisungen entfernen. Sie haben jedoch recht. Ich hatte nicht die Zeit, das undefinierte Verhalten, das ich einmal hatte, zu reproduzieren, aber ich bekam zur Laufzeit einen rein virtuellen Funktionsaufruf.
Wug

2
Du sagst doch nicht, dass du versehentlich so etwas getippt delete thishast, oder?
hörte

Nein, es war viel subtiler als das, aber das Endergebnis war das gleiche: Ein Destruktor wurde für eine Klasse während der Ausführung einer Mitgliedsfunktion
aufgerufen

3

Bash

Das habe ich heute erfahren, als ich herausgefunden habe, ob es möglich ist, das System vor zu schützen rm -rf /.

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

Die Fehlermeldung mit 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'

Diese Warnung kommt rmnicht von bash. Sie sind sich nicht sicher, welche Sprache Sie im Titel deklarieren sollen, da Sie sie basheingerichtet haben.

2

R

Eine andere, die nicht lächerlich ist und wiederum eher eine Warnung als ein Fehler ist, aber trotzdem nett:

> 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)

Ich mag das letzte bisschen: 50 oder mehr :)

Und die tatsächlichen Warnungen:

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

FUN = FUN!


1
Nyan Code ?! Nun, das ist wirklich komisch!
Kroltan

Ich sehe nicht, was unerwartet oder überraschend ist. Protokoll eines Negativs erzeugt Not A Number (NaN), wie es sollte.
Plannapus

2

CPython

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

Das Ergebnis:

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.

Noch besser in Python 3: ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None)).
kirbyfan64sos

2

Bash - nicht intuitive Fluchtversagen

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

kehrt zurück

-bash: !11: event not found

(Die Erweiterung des Verlaufs in der Befehlszeile wird nicht durch doppelte Anführungszeichen verhindert.)

Bonus:

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

Es ist unwahrscheinlich, dass die Ausgabe den Erwartungen entspricht. Drücken Sie nach oben , um den Befehl erneut abzurufen, und stellen Sie fest, dass er sich von Ihrer Eingabe unterscheidet. Wenn Sie mehrmals drücken und eingeben, sieht Ihre Ausgabe wahrscheinlich etwas schrecklich aus. Probieren Sie es aus.


2
Diese Antwort ist ein Duplikat von codegolf.stackexchange.com/a/17776 .
Dennis

2

Rekursiver, fauler Fibonacci-Generator

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;
        }
    }
}

Dieser Code sieht gut aus, oder? Ein ziemlich einfacher Fibonacci-Generator, der mit einigen Rekursionen und faulen Aufzählungen aufwartet. Sollte arbeiten.

Nee! Wenn Sie dies ausführen, wird eine OverflowException ausgelöst. Dies liegt daran, dass wir eine Dezimalzahl verwenden und die 141. Fibonacci-Zahl (~ 8.1E28) den Maximalwert der Dezimalzahl (~ 7.9E28) überschreitet.

Das int löst jedoch keine OverflowException aus, wenn Sie den Maximalwert überschreiten. Stattdessen läuft es wie erwartet auf einen negativen Wert über. Wenn wir also stattdessen int durch decimal ersetzen, wie im folgenden Code, sollte es funktionieren, oder?

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;
        }
    }
}

Wenn Sie den Code lesen, sollte klar sein, warum dies nicht funktioniert. Wenn nicht ... Ich habe den Typ nicht einfach von dezimal auf int geändert. Ich habe mich auch an ToList () in der foreach-Anweisung gewöhnt. Dadurch wird der zurückgegebene Enumerator gezwungen, eifrig ausgewertet zu werden. Dies führt nicht zu 141 Rekursionen, sondern zu unendlich vielen Rekursionen. Eigentlich wird der Stack lange bevor er auf unendlich geht überlaufen, was zur Folge hat, dass die Laufzeit eine StackOverflowException auslöst. (Bonus: Diese Ausnahme kann nicht abgefangen werden, daher stürzt die Laufzeit ab.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.